0

我正在用 C# 编写 asp.net 项目,但我遇到了一个小问题。

我在gridview中有一个下拉列表,它们最初都是从一个数据库中填充的,但是不同的表(不同的选择查询)。

我想从查询中为下拉列表设置工具提示,该查询用于通过以下代码填充 gridview(DataTable1):

  <asp:TemplateField HeaderText="choose supervisor"  ItemStyle-Width="100px">
                 <ItemTemplate>                
                       <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true"                 
 OnSelectedIndexChanged="ddlTest_SelectedIndexChanged"
 ToolTip =<%#((DataSet1.DataTable1Row)(((DataRowView)Container.DataItem).Row)).p_id %>>
                       </asp:DropDownList>
                  </ItemTemplate>                
            </asp:TemplateField> 

但是当我尝试运行该项目时,出现以下错误:

Object reference not set to an instance of an object.

如果我尝试手动设置 Tooltip,例如:

ToolTip = "abc"

该项目运行没有任何问题。

有人知道如何从数据库查询中为下拉列表设置工具提示吗?谢谢。

4

1 回答 1

2

我会从 GridView 的RowDataBound事件中做到这一点,该事件每次触发GridViewRow但仅在数据GridView绑定时触发。

protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    var grid = (GridView)sender;
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList DropDownList1 = (DropDownList)e.Row.FindControl("DropDownList1");
        DataRowView drv = (DataRowView)e.Row.DataItem;
        DataSet ds = drv.Row.Table.DataSet;
        // i'm not 100% sure what you need here, for example:
        DropDownList1.ToolTip = drv.Row.Field<int>("p_id").ToString();
    }
}

这更具可读性,更易于维护和调试。

于 2012-07-12T09:45:37.740 回答