我有一个按钮点击创建的gridview。它有一些复选框,因此用户可以调整某些页面的CRUD访问权限,然后保存所有行。
我有另一个按钮来保存我循环的行,获取rowID和访问权限以进行保存。
我在保存时遇到问题,它无法在行中找到控件,当它到达ID =我得到一个对象引用异常。如果我先做复选框分配,我会在C =部分得到错误。
protected void btnSave_Click(object sender, EventArgs e)
{
foreach (GridViewRow r in gvRights.Rows)
{
if (r.RowType == DataControlRowType.DataRow)
{
int ID;
ID = Convert.ToUInt16(r.Cells[0].ToString());
bool C, R, U, D;
CheckBox chkC = r.FindControl("chkC") as CheckBox;
C = chkC.Checked;
CheckBox chkR = r.FindControl("chkR") as CheckBox;
R = chkR.Checked;
CheckBox chkU = r.FindControl("chkU") as CheckBox;
U = chkU.Checked;
CheckBox chkD = r.FindControl("chkD") as CheckBox;
D = chkD.Checked;
}
}
}
的GridView:
<asp:GridView ID="gvRights" runat="server" Width="100%" BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" AutoGenerateColumns="False" OnRowDataBound="gvRights_RowDataBound">
<AlternatingRowStyle BackColor="#DCDCDC" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="Page ID" />
<asp:BoundField DataField="PageName" HeaderText="Page Name" />
<asp:BoundField DataField="PageDesc" HeaderText="Page Desc" />
<asp:TemplateField HeaderText="Create"></asp:TemplateField>
<asp:TemplateField HeaderText="Read"></asp:TemplateField>
<asp:TemplateField HeaderText="Update"></asp:TemplateField>
<asp:TemplateField HeaderText="Delete"></asp:TemplateField>
</Columns>
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#F1F1F1" />
<SortedAscendingHeaderStyle BackColor="#0000A9" />
<SortedDescendingCellStyle BackColor="#CAC9C9" />
<SortedDescendingHeaderStyle BackColor="#000065" />
</asp:GridView>
答案 0 :(得分:1)
如果要以编程方式添加复选框,则需要在pageinit(page_load之前)的每个页面加载中重新添加它们。这样,每个回发都会添加控件,并从视图状态中填充它们的值。
更简单的方法是在定义
中的模板字段中实际添加复选框 <asp:TemplateField>
<ItemTemplate>
<asp:CheckBox runat="server" ID="chkC" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox runat="server" ID="chkC" />
</EditItemTemplate>
</asp:TemplateField>