简体   繁体   English

在asp.net中将WebUserControl添加到Gridview

[英]Adding WebUserControl To Gridview in asp.net

I want to add a webusercontol which contains a textbox and a label to the gridview control. 我想将一个包含文本框和标签的webusercontol添加到gridview控件。 I am binding a gridview with a datatable dynamically. 我正在动态绑定一个GridView与一个数据表。

Here is my code: 这是我的代码:

@ Register Src="CompareBox.ascx" TagName="CompareBox" TagPrefix="objCompareBox" %><br>
<asp:GridView ID="grdfoneBoxContainer" runat="server">
         <Columns><br>
              <asp:TemplateField HeaderText="User control"> <br>
                  <ItemTemplate><br>
                      <objCompareBox:CompareBox ID="CompareBoxCol1" runat="server"/><br>
                  </ItemTemplate><br>
              </asp:TemplateField><br>
         </Columns><br>
</asp:GridView><br>

    DataTable dt = new DataTable();
    dt.Columns.Add("uc1");
    dt.Columns.Add("uc2");
    dt.Columns.Add("uc3");
    dt.Columns.Add("uc4");

    CompareBox objCompareBox = new CompareBox();
    objCompareBox.txt= "World";
    objCompareBox.lbl = "Hello";

    dt.Rows.Add(objCompareBox, objCompareBox, objCompareBox, objCompareBox);
    dt.Rows.Add(objCompareBox, objCompareBox, objCompareBox, objCompareBox);
    dt.Rows.Add(objCompareBox, objCompareBox, objCompareBox, objCompareBox);
    dt.Rows.Add(objCompareBox, objCompareBox, objCompareBox, objCompareBox);


    grdfoneBoxContainer.DataSource = dt;
    grdfoneBoxContainer.DataBind();

txt & lbl are two properties that are declared in WebUserControl but it's giving object reference error . txt和lbl是在WebUserControl中声明的两个属性,但它给了对象引用错误。

Thanks, 谢谢,

you have to intercept that object within the RowDataBound event. 您必须在RowDataBound事件中拦截该对象。

After you have call grdfoneBoxContainer.DataBind(); 调用grdfoneBoxContainer.DataBind();之后; if you write and handler for the event RowDataBound: 如果为事件RowDataBound编写并处理事件:

protected void grdfoneBoxContainer_RowDataBound(object sender, GridViewRowEventArgs e) { if(e.Row.RowType==DataControlRowType.DataRow) { CompareBox compareBox = (CompareBox) e.Row.FindControl("CompareBoxCol1"); 受保护的void grdfoneBoxContainer_RowDataBound(object sender,GridViewRowEventArgs e){if(e.Row.RowType == DataControlRowType.DataRow){CompareBox compareBox =(CompareBox)e.Row.FindControl(“ CompareBoxCol1”);

        //here you have a reference to your control
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM