我有一个从具有多个TemplateFields的数据库加载的gridview。如何从代码后面检索Eval值?换句话说,我需要该列的模板字段名称。
我希望获得“注册”并将其存储在变量中。
<asp:TemplateField HeaderText="REG" SortExpression="Registrations">
<EditItemTemplate>
<asp:CheckBox ID="cbRegEdit" runat="server" Checked='<%# (int)Eval("Registrations") == 1 %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbReg" runat="server" Enabled="false" Checked='<%# (int)Eval("Registrations") == 1 %>'>
</asp:CheckBox>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
答案 0 :(得分:2)
您必须挂钩OnRowDataBound
并执行以下操作:
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
var registrations = ((YourType)e.Row.DataItem).Registrations;
//do something
}
}
您的GridView必须是:
<asp:GridView OnRowDataBound="GridView1_RowDataBound" ...
答案 1 :(得分:0)
最简单的方法可能是为您的gridview分配datakey。
一个例子是这样的:
<asp:Gridview ID="gvExample" runat="server" DataKeyNames="Registrations">
然后在后面的代码中你需要的是行索引,你可以执行以下操作:
gvExample.Datakeys(rowindex).value
答案 2 :(得分:0)
CheckBox CBreg = (Page.FindControl("cbReg") as CheckBox);
bool Reg = CBreg.Checked; //Reg value stored
如果您无法以这种方式找到控件,则可能需要将Page.FindControl更改为TemplateField控件ID。