C# 如何为嵌套gridview中的控件赋值?
我有一个名为“gvParentGrid”的父gridview,其中嵌套了名为“gvChildGrid”的gridview。我在父gridview-gvParentGrid中创建了一个行数据绑定事件 我正在尝试将label11分配给sql查询输出。在下面的代码中,我试图将rDate分配给label11变量,但它一直抛出一个--对象引用,而该引用未设置为对象的实例。错误C# 如何为嵌套gridview中的控件赋值?,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个名为“gvParentGrid”的父gridview,其中嵌套了名为“gvChildGrid”的gridview。我在父gridview-gvParentGrid中创建了一个行数据绑定事件 我正在尝试将label11分配给sql查询输出。在下面的代码中,我试图将rDate分配给label11变量,但它一直抛出一个--对象引用,而该引用未设置为对象的实例。错误 if (e.Row.RowType == DataControlRowType.DataRow) {
if (e.Row.RowType == DataControlRowType.DataRow)
{
con.Open();
GridView gv = (GridView)e.Row.FindControl("gvChildGrid");
Label lblorderID = (Label)e.Row.FindControl("Label2");
Label lblRead = (Label)gv.FindControl("Label11");
string userID = lblorderID.Text;
string cmdstr = "select top 2 [rUID], count([rDATE]) as 'articles read' from ArticlesRead where [rUID] = @ID group by [rUID] order by count([rDATE]) desc";
SqlCommand cmd = new SqlCommand(cmdstr, con);
cmd.Parameters.AddWithValue("@ID", userID);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
// Line below causing the object reference error.
***lblRead.Text = ds.Tables[0].Rows[0][1].ToString();***
}
con.Close();
gv.DataSource = ds;
gv.DataBind();
}
以下是客户端模板供进一步参考:
<asp:GridView ID="gvParentGrid" runat="server" DataKeyNames="uID" Width="300" AutoGenerateColumns="false" OnRowDataBound="gvUserInfo_RowDataBound">
<asp:TemplateField HeaderText="ID" SortExpression="ID">
<HeaderTemplate>
<asp:Label ID="Label1" runat="server" Text="ID"></asp:Label><br />
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("uID") %>' > </asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:GridView ID="gvChildGrid" runat="server" AutoGenerateColumns="false" DataKeyNames="uID">
<asp:TemplateField HeaderText="Articles Read">
<ItemTemplate>
<asp:Label ID="Label11" runat="server" Text=""></asp:Label>
</ItemTemplate>
</asp:TemplateField>
如有任何进一步建议,将不胜感激。谢谢您不应该对数据集中的每一行执行数据库查询。您应该执行一次查询(这可能意味着只执行一次联接),构建一组完整的结果,用于绑定外部gridview和所有内部gridview,然后一次绑定所有内容。我还强烈建议不要使用RowDataBind事件。改为在标记中执行所有绑定。它不仅会鼓励您遵循我之前评论中的建议,而且更简单,只允许您利用提供给您的所有工具。如果您没有实际使用GridView的数据绑定功能,那么使用GridView没有多大意义。
lblRead
标签为NULL,在if
条件下,您没有验证标签是否与NULL不同(因此,异常),并且在代码示例中,您丢失了更多代码,就像GridView
中的列
标记一样。请更新您的问题。