根据数据表值在gridview中设置复选框
Posted
技术标签:
【中文标题】根据数据表值在gridview中设置复选框【英文标题】:set checkbox in gridview based on datatable value 【发布时间】:2011-09-20 16:06:56 【问题描述】:我有一个带有复选框字段和几个绑定字段的 gridview 控件。复选框字段不直接映射到数据库中的字段。相反,我想从数据库中的一个字段中读取一个值并“检查”一些复选框。
例如,给定以下数据库中的数据 -> 数据表
处理名称 日期 Y 米老鼠 11/15/2011 N唐老鸭 4/01/2012 Y 詹姆斯邦德 5/02/2011我希望 gridview 显示一个复选框并将框的值设置为 UNCHECKED 其中 PROCESSED = N 并且对于 PROCESSED = Y 要么有一个不可编辑的复选框,要么根本没有复选框。
处理名称 日期 [/] 米老鼠 2011 年 11 月 15 日 [ ] 唐老鸭 4/01/2012 [/] 詹姆斯邦德 5/02/2011为了填充gridview,对数据库运行SQL stmt,并将SQL 查询的结果存储在数据表中。在将数据表绑定到gridview之前,我想检查“已处理”字段并根据该值设置复选框。
这里是 gridview 控件(为清楚起见缩短了):
<asp:GridView ID="gridview_all_applicants" runat="server" AllowPaging="True">
<Columns>
<asp:TemplateField HeaderText="Complete">
<ItemTemplate>
<asp:CheckBox ID="process_flag" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="lastname" HeaderText="Last Name" ReadOnly="True" SortExpression="lastname" />
这是我目前在后面的代码中所拥有的
SqlCommand cmd = new SqlCommand(sql query here);
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = cmd;
// Save results of select statement into a datatable
da.Fill(dt);
foreach (DataRow r in dt.Rows)
// do some processing of data returned from query
// read the char value from the returned data and set checkbox
procflag = r["process_flag"].ToString().ToLower();
CheckBox chkbox = new CheckBox();
if (procflag == null || procflag == "n")
// SET CHECKBOX TO "NOT CHECKED"
else
// SET CHECKBOX TO "CHECKED" AND MAKE IT UNCLICKABLE
// ----OR---- DO NOT DISPLAY CHECKBOX AT ALL.
// end for each
gridview_all_applicants.DataSource = dt;
gridview_all_applicants.DataBind();
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:你可以这样做:
sql server 中的第一个:
SELECT
CAST(CASE PROCESSED WHEN 'Y' THEN 1 ELSE 0 END AS BIT) AS PROCESSED
NAME
DATE
FROM ExampleTable
在 C# 代码中:
SqlCommand cmd = new SqlCommand(sql query here);
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
da.SelectCommand = cmd;
// Save results of select statement into a datatable
da.Fill(dt);
gridview_all_applicants.DataSource = dt;
gridview_all_applicants.DataBind();
最后在 aspx 中:
<asp:TemplateField HeaderText="Complete">
<ItemTemplate>
<asp:CheckBox ID="process_flag" runat="server" Checked='<%# bool.Parse(Eval("PROCESSED").ToString()) %>' Enable='<%# !bool.Parse(Eval("PROCESSED").ToString()) %>'/>
</ItemTemplate>
【讨论】:
Marco - 你我的朋友绝对是个天才!多么优雅的解决方案……完美……谢谢!!!【参考方案2】:如果您使用的是非 sqlserver 数据库,那么与数据库无关的解决方案怎么样;)
<asp:CheckBox ID="process_flag_check" runat="server"
Checked='<%# Eval("process_flag").ToString() == "Y" ? "True": "False" %>'
Enabled="false"/>
</asp:Content>
【讨论】:
【参考方案3】:<asp:CheckBox ID="process_flag_check" runat="server"
Checked='<%# bool.Parse(Eval("process_flag").ToString() == "Y" ? "True": "False") %>'
Enabled="false"/>
</asp:CheckBox>
这个完美的作品。我已经使用 Kevin 和 marco Code 进行了修改。 谢谢你 Kevinv 和 Marco
【讨论】:
以上是关于根据数据表值在gridview中设置复选框的主要内容,如果未能解决你的问题,请参考以下文章