我在网格视图的edititemtamlate旁边创建了一个表。
<asp:TemplateField>
<EditItemTemplate>
<%-- <asp:Panel ID="pnltable" runat="server">--%>
<table border="1px" cellpadding="0px" cellspacing="0px" >
<tr>
<td>
<asp:Label Text="T1" runat="server" ID="Label111"></asp:Label>
</td>
<td>
<asp:Label Text="T2" runat="server" ID="Label112"></asp:Label>
</td>
<td>
<asp:Label Text="T3" runat="server" ID="Label113"></asp:Label>
</td>
<td>
<asp:Label Text="T4" runat="server" ID="Label114"></asp:Label>
</td>
<td>
<asp:Label Text="T5" runat="server" ID="Label115"></asp:Label>
</td>
<td>
<asp:Label Text="T6" runat="server" ID="Label116"></asp:Label>
</td>
<td>
<asp:Label Text="T7" runat="server" ID="Label117"></asp:Label>
</td>
<td>
<asp:Label Text="T8" runat="server" ID="Label118"></asp:Label>
</td>
<td>
<asp:Label Text="T9" runat="server" ID="Label119"></asp:Label>
</td>
<td>
<asp:Label Text="T10" runat="server" ID="Label1110"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:CheckBox ID="CheckBox11" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox12" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox13" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox14" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox15" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox16" runat="server" AutoPostBack="true"/>
</td>
<td>
<asp:CheckBox ID="CheckBox17" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox18" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox19" runat="server" AutoPostBack="true" />
</td>
<td>
<asp:CheckBox ID="CheckBox20" runat="server" AutoPostBack="true" />
</td>
</tr>
</table>
<%--</asp:Panel>--%>
</EditItemTemplate>
当用户点击编辑按钮时,此表会显示表格中的值。 为此,我在editcommand中编写代码,这样可以很好地工作。
Guid SubscriptionId = (Guid)Subscriptions.DataKeys[e.NewEditIndex].Value;
var s = m.bussinesCollection.BussinesPlanning.GetSingleSubVersionTrueFalse(SubscriptionId);
CheckBox d11 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox11");
CheckBox d12 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox12");
CheckBox d13 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox13");
CheckBox d14 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox14");
CheckBox d15 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox15");
CheckBox d16 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox16");
CheckBox d17 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox17");
CheckBox d18 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox18");
CheckBox d19 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox19");
CheckBox d20 = (CheckBox)Subscriptions.Rows[e.NewEditIndex].FindControl("CheckBox20");
if (d11 != null){
d11.Checked = s.T1.Value;
}
if (d12 != null){
d12.Checked = s.T2.Value;
}
if (d13 != null){
d13.Checked = s.T3.Value;
}
if (d14 != null){
d14.Checked = s.T4.Value;
}
if (d15 != null){
d15.Checked = s.T5.Value;
}
if (d16 != null){
d16.Checked = s.T6.Value;
}
if (d17 != null){
d17.Checked = s.T7.Value;
}
if (d18 != null){
d18.Checked = s.T8.Value;
}
if (d19 != null) {
d19.Checked = s.T9.Value;
}
if (d20 != null){
d20.Checked = s.T10.Value;
}
现在在更新命令中,当我更改复选框值并尝试更新它时,就像更新命令中的此代码一样
CheckBox c1 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox11"));
CheckBox c2 = (CheckBox)(Subscriptions.Rows[e.RowIndex].Cells[7].FindControl("CheckBox12"));
CheckBox c3 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox13"));
CheckBox c4 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox14"));
CheckBox c5 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox15"));
CheckBox c6 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox16"));
CheckBox c7 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox17"));
CheckBox c8 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox18"));
CheckBox c9 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox19"));
CheckBox c10 = (CheckBox)(Subscriptions.Rows[e.RowIndex].FindControl("CheckBox20"));
if (c1 != null && c2 != null && c3 != null && c4 != null && c5 != null && c6 != null && c7 != null && c8 != null && c9 != null && c10 != null)
{
m.bussinesCollection.BussinesPlanning.UpdateSubVersionTrueFalseForUpdate(subscriptionID, c1.Checked, c2.Checked, c3.Checked, c4.Checked, c5.Checked, c6.Checked, c7.Checked, c8.Checked, c9.Checked, c10.Checked);
}
但是这里没有给出任何错误,但是当我调试代码时,我表明,
在复选框中,在更新命令中控制c1到c10,它总是获得值
Checked = false
即使我选中了复选框。
因此它以错误的方式更新。
能告诉我哪里错了吗??
答案 0 :(得分:0)
这是我尝试的小例子
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) {
bindgv();
}
}
public void bindgv()
{
SqlDataAdapter dap = new SqlDataAdapter("select * from mytable", Con);
DataSet ds = new DataSet();
dap.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
CheckBox c1 = (CheckBox)GridView1.Rows[e.RowIndex].FindControl("CheckBox1");
CheckBox c2 = (CheckBox)GridView1.Rows[e.RowIndex].FindControl("CheckBox2");
CheckBox c3 = (CheckBox)GridView1.Rows[e.RowIndex].FindControl("CheckBox3");
Label lblid = (Label)GridView1.Rows[e.RowIndex].FindControl("lblid");
updateMethod(lblid.Text, c1.Checked, c2.Checked, c3.Checked);
}
public void updateMethod(string id, bool c1, bool c2, bool c3)
{
using (SqlConnection con = new SqlConnection(myCon))
{
con.Open();
SqlCommand cmd = new SqlCommand("update mytable set c1= @c1value , c2=@c2value, c3= @c3value where id=@id", con);
cmd.Parameters.AddWithValue("@c1value", c1);
cmd.Parameters.AddWithValue("@c2value", c2);
cmd.Parameters.AddWithValue("@c3value", c3);
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
GridView1.EditIndex = -1;
bindgv();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
bindgv();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
bindgv();
}
HTML MarkUp
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
onrowediting="GridView1_RowEditing"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowupdating="GridView1_RowUpdating">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:Label ID="lblid" runat="server" Text='<%# Bind("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="checkbox">
<ItemTemplate>
<table>
<tr>
<td><asp:Label ID="Label2" runat="server" Text='<%# Bind("c1") %>'></asp:Label></td>
<td><asp:Label ID="Label5" runat="server" Text='<%# Bind("c2") %>'></asp:Label></td>
<td><asp:Label ID="Label4" runat="server" Text='<%# Bind("c3") %>'></asp:Label></td>
</tr>
<tr>
<td> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("c1") %>' /></td>
<td><asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Bind("c2") %>' /></td>
<td><asp:CheckBox ID="CheckBox3" runat="server" Checked='<%# Bind("c3") %>' /></td>
</tr>
</table>
</ItemTemplate>
<EditItemTemplate>
<table>
<tr>
<td><asp:Label ID="Label2" runat="server" Text='<%# Bind("c1") %>'></asp:Label></td>
<td><asp:Label ID="Label5" runat="server" Text='<%# Bind("c2") %>'></asp:Label></td>
<td><asp:Label ID="Label4" runat="server" Text='<%# Bind("c3") %>'></asp:Label></td>
</tr>
<tr>
<td> <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("c1") %>' /></td>
<td><asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Bind("c2") %>' /></td>
<td><asp:CheckBox ID="CheckBox3" runat="server" Checked='<%# Bind("c3") %>' /></td>
</tr>
</table>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Edit" Text="Edit"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
CommandName="Update" Text="Update"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
CommandName="Cancel" Text="Cancel"></asp:LinkButton>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<强>截图:强>