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;
希望您能理解。如果您在其他任何时候需要此代码,可以将其放在OnEditCommand
、OnDeleteCommand
等...
【讨论】:
这行得通,它会在表单中添加一个复选框,这很好,但是当我更新它时,它没有设置值,但它也不会出错? 我很难理解这一点,您能否进一步解释一下,当我选中复选框时,我需要在数据库的字段中写入 Y 或 N 您必须将值转换回您的数据库。当用户选中或取消选中该框时,它具有真或假。您必须将此值转换为 Y 或 N,以便它就像您在数据库中所拥有的一样。 DataGrid 必须有一个 OnUpdating 事件,该事件应该允许您在将值发送到数据库之前进行转换。 您好,谢谢以上事实证明我正在使用如果您的代码需要比 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 数据网格复选框的主要内容,如果未能解决你的问题,请参考以下文章
使用treeview控件读数据库动态生成带checkbox复选框的树形导航菜单asp.net(C#),急求帮助还可加分