大家好的程序员,在这里遇到了一些问题。我在gridview中添加了一个用户控件。 现在我的问题是如何绑定它导致用户控件内部是一个需要 CourseCatID 的gridview,以便它可以绑定数据。顺便说一句,我不能使用嵌套的griview,因为我需要为另一个目的使用嵌套的usercontrol渲染。任何教程/帮助都将很高兴。
<asp:GridView ID="grdCategory" runat="server" AutoGenerateColumns="False" Width="1100px"
DataKeyNames="CourseCatID" Font-Names="verdana,arial,helvetica,sans-serif" Font-Size="8pt"
CellPadding="4" ForeColor="#333333" GridLines="None">
<Columns>
<asp:ButtonField Text="SingleClick" CommandName="SingleClick" Visible="False" />
<asp:BoundField HeaderText="CourseCatID" Visible = "false" DataField="CourseCatID" />
<asp:TemplateField HeaderText="Course Category">
<ItemTemplate>
<asp:Label ID="lblCourseCatID" runat="server" Visible="false" Text='<%# Eval("CourseCatID")%>'></asp:Label>
<a href="javascript:toggleDiv('mydiv<%# Eval("CourseCatID")%>')">
<asp:TextBox ID="txtCourseCatName" runat="server" Text='<%# Eval("CourseCatName") %>' Font-Size="XX-Small"
Font-Names="Verdana" Width="300px" Visible="false"></asp:TextBox>
<asp:Image ID="img" onclick="javascript:Toggle(this);" runat="server" ImageUrl="~/Images/minus.gif"
ToolTip="Collapse" Width="7px" Height="7px" ImageAlign="AbsMiddle" /></a>
<asp:Label ID="lbllastname" Height="15px" runat="server" Text='<%# Eval("CourseCatName")%>'> </asp:Label>
<div id="mydiv<%# Eval("CourseCatID")%>">
<br />
      <%--OnClick="ImageAdd_click" --%>
<asp:ImageButton ID="ImageAdd" Height="17px" ImageUrl="Images/addCourse.png" runat="server"
CommandName="cmdAdd" CommandArgument='<%# Eval("CourseCatID") %>' />
<br />
<br />
      
<asp:Panel ID="pnlCourse" runat="server"></asp:Panel>
<b><cuc1:CourseUserControl ID="CourseUserControl1" runat="server" /></b>
<br />
<br />
<br />
<br />
</div>
</ItemTemplate>
</asp:TemplateField>
感谢您的时间
答案 0 :(得分:3)
你有几个选择。
最简单的方法是在用户控件上公开一个可以执行此操作的公共属性:
<cuc1:CourseUserControl ID="CourseUserControl1" runat="server" CourseCategoryID='<%# (int)Eval("CourseCatID") %>' />
然后在分配该属性后立即在用户控件中进行数据绑定。请注意,我假设该类别是Int32。例如(请注意,CourseCategoryID将其值存储在私有字段中,而不是存储在ViewState中):
private int _courseCategoryID;
public int CourseCategoryID
{
get { return _courseCategoryID; }
set
{
_courseCategoryID = value;
// TODO: code that initializes the GridView in user control.
this.DataBind();
}
}
您的另一个选择是公开相同的属性并处理RowDataBound事件并执行此操作:
if (e.Row.RowType == DataControlType.DataRow)
{
CourseUserControl courseDetails;
courseDetails = (CourseUserControl)e.Row.FindItem("CourseUserControl1");
// Assuming category ID is Int32
courseDetails.CourseCategoryID = (int)grdCategory.DataKeys[e.Row.RowIndex].Value;
courseDetails.DataBind();
}
请注意,我在为当前行的用户控件分配新类别后手动而不是立即进行数据绑定。
有关详细信息,请参阅: GridView.RowDataBound Event (ASP.NET 3.5) 要么 GridView.RowDataBound Event (ASP.NET 4.0)