【问题标题】:C# ASP.NET DataGrid CheckboxC# ASP.NET 数据网格复选框
【发布时间】: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?

标签: c# asp.net datagrid checkbox bind


【解决方案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 属性,将其转换为“是”或“否”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2015-01-22
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 2011-04-18
      相关资源
      最近更新 更多