C# 更改数据源后从GridView获取数据

C# 更改数据源后从GridView获取数据,c#,asp.net,sql-server,gridview,webforms,C#,Asp.net,Sql Server,Gridview,Webforms,我试图将gridview的列名添加到下拉列表中。 问题是,当我更改gridview的数据源时,它返回空 我不确定该活动是否正常工作,因为有/没有它它都不起作用。 我想使用DataBindComplete事件,但我看不到它,所以我尝试使用DataBind private void BindTable() { if (ddTableSearch.SelectedIndex == 0) { tblCustomerTableAdapter

我试图将gridview的列名添加到下拉列表中。 问题是,当我更改gridview的数据源时,它返回空

我不确定该活动是否正常工作,因为有/没有它它都不起作用。 我想使用DataBindComplete事件,但我看不到它,所以我尝试使用DataBind

 private void BindTable()
    {
        if (ddTableSearch.SelectedIndex == 0)
        {
            tblCustomerTableAdapter customerAdapter = new tblCustomerTableAdapter(); 
            GridView2.DataSource = customerAdapter.GetData();
            GridView2.DataBind();
        }
        else if (ddTableSearch.SelectedIndex == 1)
        {
            tblInvoiceTableAdapter invoiceAdapter = new tblInvoiceTableAdapter();
            GridView2.DataSource = invoiceAdapter.GetData();
            GridView2.DataBind();
        }
        else if (ddTableSearch.SelectedIndex == 2)
        {
            tblEstimateTableAdapter estimateAdapter = new tblEstimateTableAdapter();
            GridView2.DataSource = estimateAdapter.GetData();
            GridView2.DataBind();
        }
    }

    protected void GridView2_DataBound(object sender, EventArgs e)
    {
        // Populate dropdown with column names
        ddColumnSearch.Items.Clear();
        for (int i = 0; i < GridView2.Columns.Count; i++)
        {
            ddColumnSearch.Items.Add(new ListItem(GridView2.Columns[i].ToString()));
        }
    }
private void BindTable()
{
if(ddTableSearch.SelectedIndex==0)
{
tblCustomerTableAdapter customerAdapter=新tblCustomerTableAdapter();
GridView2.DataSource=customerAdapter.GetData();
GridView2.DataBind();
}
else if(ddTableSearch.SelectedIndex==1)
{
tblInvoiceTableAdapter invoiceAdapter=新tblInvoiceTableAdapter();
GridView2.DataSource=invoiceAdapter.GetData();
GridView2.DataBind();
}
else if(ddTableSearch.SelectedIndex==2)
{
tblEstimateTableAdapter estimateAdapter=新tblEstimateTableAdapter();
GridView2.DataSource=estimateAdapter.GetData();
GridView2.DataBind();
}
}
受保护的void GridView2_数据绑定(对象发送方、事件参数e)
{
//用列名填充下拉列表
ddColumnSearch.Items.Clear();
对于(int i=0;i

我做错了什么?

gridview中的每条记录都会运行数据绑定事件。因此,一个问题是,每次您清除之前添加的项目时。另一个问题是,您需要从EventArgs而不是gridview.columns获取数据,因为在绑定所有数据之前,这些列都不存在。我认为您需要做的就是从标题行获取数据:

protected void GridView2_DataBound(object sender, EventArgs e)
{
    // Populate dropdown with column names
    if(e.Row.RowType != DataControlRowType.Header) return; //only continue if this is hdr row
    ddColumnSearch.Items.Clear();
    foreach (TableCell cell in e.Row.Cells)
    {
        ddColumnSearch.Items.Add(new ListItem(cell.Text));
    }
}