【发布时间】:2011-10-06 00:29:58
【问题描述】:
我有一个数据网格,每一行都有一个复选框。也可以更新每一行中的每个字段
用户可以更新多行并选中任何复选框。
点击提交按钮后,所有数据都应更新。我需要复选框来更新数据库中的布尔值(或者布尔类型用于 sql server)。
- 如何实现复选框以更新数据库中的表?
- 如何通过单击提交按钮获取所有要更新的数据?
【问题讨论】:
我有一个数据网格,每一行都有一个复选框。也可以更新每一行中的每个字段
用户可以更新多行并选中任何复选框。
点击提交按钮后,所有数据都应更新。我需要复选框来更新数据库中的布尔值(或者布尔类型用于 sql server)。
【问题讨论】:
如果您使用的是 GridView,基于您获得的上一个示例中的示例,您可以执行此操作。 **这是半伪代码,请注意**
<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="false"
autogenerateeditbutton="true"
allowpaging="true"
datakeynames="CustomerID"
runat="server">
<columns>
<asp:templatefield>
<itemtemplate> <%-- This is itemtemplate so they are visible by default --%>
<asp:CheckBox ID="cbVerify" runat="server"></asp:CheckBox>
<asp:HiddenField ID="hidID" runat="server" Value='<%# Bind("CustomerID") %>'></asp:HiddenField>
</itemtemplate>
</asp:templatefield>
<asp:boundfield datafield="CustomerID" readonly="true" headertext="Customer ID"/>
<asp:boundfield datafield="CompanyName" readonly="true" headertext="Customer Name"/>
<asp:boundfield datafield="Address" headertext="Address"/>
<asp:boundfield datafield="City" headertext="City"/>
<asp:boundfield datafield="PostalCode" headertext="ZIP Code"/>
</columns>
</asp:gridview>
<asp:Button ID="btSubmit" runat="server" OnClick="btSubmit_Click"></asp:Button>
处理此问题的代码
public void btSubmit_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in CustomersGridView.Rows)
{
CheckBox cbVerify = (CheckBox)row.FindControl("cbVerify");
HiddenField hidID = (HiddenField)row.FindControl("hidID");
// Do your validation of the data here
..
if (cbVerify != null)
{
// Add fields and update
sqlRecord.UpdateParameters["ID"].DefaultValue = hidID.Value;
sqlRecord.UpdateParameters["Valid"].DefaultValue = cbVerify.Checked.ToString();
sqlRecord.Update();
}
}
这应该会让你朝着特定的方向看。
【讨论】:
遍历数据网格并将您要更新的所有数据存储在数组或类似物中。 Sql server 有一个bit 数据类型,如果复选框关闭,您可以将其设置为0,如果它是checked,则可以将其设置为1。收集完所有数据后,将其传递到数据层以进行 sql 更新
您可以使用DataGrid 对象来遍历其单元格/控件。例如,使用嵌套循环可以:
myDG.Items[index1].Cells[index2].Controls[0]
编辑:这取决于您在列中拥有的输入控件,因为您必须强制转换它们。假设您有一个数据网格,其中包含 10 列和除最后一列之外的所有列中的文本框,即 CheckBox,您会这样做:
CheckBox cb = null;
TextBox tb = null;
List<string> myList = new List<string>();
for(int row = 0; row < myDG.Items.Count; row++)
{
for(int col = 0; col < myDG.Columns.Count; col++)
{
if(col < 9){
tb = myDG.Items[row].Cells[col].Controls[0] as TextBox;
myList.Add(tb.Text);
}
else{
cb = myDG.Items[row].Cells[col].Controls[0] as CheckBox;
myList.Add(((cb.Checked) ? "1" : "0"));
}
}
}
如果您愿意,也可以使用 2D 数组/列表来存储。高温
【讨论】:
<asp:GridView ID="GridView1" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate><!--asp:textbox here--></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>