C# ASP.NET 数据网格复选框

Posted

技术标签:

【中文标题】C# ASP.NET 数据网格复选框【英文标题】:C# ASP.NET DataGrid Checkbox 【发布时间】:2012-03-11 23:37:13 【问题描述】:

我有一个可编辑的数据网格,它从 SQL 查询中提取数据,其中一个字段的答案是 Y 或 N,因此需要是一个复选框,但是在编辑模式下,它显示为一个字段,如果我把它放进去,它会显示错误

<asp:CheckBox ID="ALFSUPR" runat="server" Checked='<%# Bind("pric_c_alfsupreq") %>'></asp:CheckBox>

有没有一种简单的方法可以将文本字段转换为 CheckBox,当 Checked 时的值 = Y

谢谢

【问题讨论】:

您在 .aspx 页面中使用了哪种控件? DataGrid 还是 DataGridView? 【参考方案1】:

试试这样的:

Checked='<%# Eval("pric_c_alfsupreq").ToString().Equals("Y") %>'>

更新:

由于您使用的是旧的 DataGrid(您现在应该使用 DataGridView),您的 DataGrid 定义中应该有类似的内容:

<asp:DataGrid ID="Grid" runat="server" PageSize="5" AllowPaging="True"
              DataKeyField="EmpId" AutoGenerateColumns="False" CellPadding="4"
              ForeColor="#333333" GridLines="No" 
              OnPageIndexChanged="Grid_PageIndexChanged"
              OnCancelCommand="Grid_CancelCommand" 
              OnDeleteCommand="Grid_DeleteCommand"
              OnEditCommand="Grid_EditCommand"
              OnUpdateCommand="Grid_UpdateCommand">

查看OnUpdateCommand...

现在当您对行数据应用更新时应该运行的方法:

protected void Grid_UpdateCommand(object source, DataGridCommandEventArgs e)

    con = new SqlConnection(ConfigurationManager.AppSettings["connect"]);

    char value = "N"

    // You'll have to change the index here to point to the CheckBox you have in
    // your DataGrid.
    // It can be on index 1 Controls[1] or 2 Controls[2]. Only you know this info.
    if(((CheckBox)e.Item.Cells[0].Controls[0]).Checked == true)
    
         value = "Y";;
    

    cmd.Parameters.Add("@pric_c_alfsupreq", SqlDbType.Char).Value = value;

    cmd.CommandText = "Update command HERE";

    cmd.Connection = con;

    cmd.Connection.Open();

    cmd.ExecuteNonQuery();

    cmd.Connection.Close();

    Grid.EditItemIndex = -1;

希望您能理解。如果您在其他任何时候需要此代码,可以将其放在OnEditCommandOnDeleteCommand 等...

【讨论】:

这行得通,它会在表单中添加一个复选框,这很好,但是当我更新它时,它没有设置值,但它也不会出错? 我很难理解这一点,您能否进一步解释一下,当我选中复选框时,我需要在数据库的字段中写入 Y 或 N 您必须将值转换回您的数据库。当用户选中或取消选中该框时,它具有真或假。您必须将此值转换为 Y 或 N,以便它就像您在数据库中所拥有的一样。 DataGrid 必须有一个 OnUpdating 事件,该事件应该允许您在将值发送到数据库之前进行转换。 您好,谢谢以上事实证明我正在使用 过程是否与上述相同? 是的,但是对于 GridView,您将使用 OnRowUpdating 命令:aspdotnet-suresh.com/2011/02/…【参考方案2】:

如果您的代码需要比 Simon 的答案更多的逻辑,您还可以在代码后面创建一个受保护的方法并调用它。

protected bool GetCheckboxValue(String value)

    //put your logic here
    return value.ToLower() == "y";

然后调用它

Checked='<%# GetCheckboxValue("pric_c_alfsupreq") %>'>

【讨论】:

【参考方案3】:

不记得我在 WebForms 的日子,但可能会改变

Checked='<%# Bind("pric_c_alfsupreq") %>'>

Checked='<%# Eval("pric_c_alfsupreq") == "Y" %>'>

当您更新时,我认为您必须处理 GridView.RowUpdating 事件,然后提取 Checked 属性,将其转换为“是”或“否”。

【讨论】:

以上是关于C# ASP.NET 数据网格复选框的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 2.0 嵌套数据网格?

asp.net mvc视图中的C#复选框事件不在表单内

使用treeview控件读数据库动态生成带checkbox复选框的树形导航菜单asp.net(C#),急求帮助还可加分

只允许选中一个复选框 - asp.net c#

使用 JQuery 在 GridView ASP.NET 中选择所有复选框

回发时的 ASP.Net 复选框值错误?