更改DataSource后从GridView获取数据

时间:2014-11-15 22:30:08

标签: c# asp.net sql-server gridview webforms

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

我不确定该事件是否正常工作,因为它不能与之一起使用。 我想使用DataBindComplete事件,但我看不到它,所以我尝试了DataBound。

 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()));
        }
    }

我做错了什么?

1 个答案:

答案 0 :(得分:0)

数据绑定事件针对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));
    }
}