我正在开发一个项目。我有一个gridview,其中一列有复选框。现在我想用数据填充gridview并根据我的状态字段检查/取消选中复选框。现在我正在gridview行中处理它数据绑定事件。但我只是想知道在绑定源时有没有办法标记复选框。
我正在执行查询以获取gridview中的数据
select s.studentcode,s.studentname,r.status from tblstudent s join tblresults r on s.studentcode=r.studentcode
输出我正在
现在我希望如果我的状态为'已提升'复选框已选中,如果未被提升,则复选框将取消选中。我不想使用行数据绑定方法。我希望我的工作在以下行中完成< / p>
sql = "select s.studentcode,s.studentname,r.status from tblstudent s join tblresults r on s.studentcode=r.studentcode";
ds = obj.openDataset(sql, Session["SchoolCode"].ToString());
if (ds.Tables[0].Rows.Count > 0)
{
grdstudents.DataSource = ds;
grdstudents.DataBind();
grdstudents.Visible = true;
}
else
{
alertdiv.Visible = true;
lblalertmsg.Visible = true;
btnclose.Visible = true;
lblalertmsg.Text = "No Record found";
}
解决方案
查询
select s.studentcode,s.studentname,if(r.status='Promoted',true,false) as status from tblstudent s left join tblresults r on s.studentcode=r.studentcode where s.classcode='10000'
grdstudents.DataSource = ds;// note we binded to final table
grdstudents.DataBind();
gridview中的aspx页面中的复选框字段:
<ItemTemplate>
<asp:CheckBox ID="chkapply" runat="server" Checked='<%# Convert.ToBoolean(Eval("status"))%>'/>
</ItemTemplate>
此解决方案将帮助您避免在使用gridview的迭代绑定或行数据绑定事件时编写额外的代码
答案 0 :(得分:2)
您需要为网格使用OnItemDataBoundEvent。 如果您不想使用该事件。然后你可以循环遍历gridview的所有行。
如果您的网格ID为grid1
,则循环遍历grid1.Rows
中的所有行。
您必须在行中找到您的复选框,然后根据您的数据选中/取消选中它。
foreach (GridViewRow row in grid1.Rows)
{
CheckBox checkBox1 = row.FindControl("checkBox1") as CheckBox;
checkBox1.Checked = true; // based on condition
}
答案 1 :(得分:2)
只能使用布尔值检查/取消选中复选框。在这种情况下,因为列:&#39;状态&#39;不代表布尔值,因此直接绑定数据不会达到目的。
您需要执行以下两个步骤:
第1步。)将原始数据复制到新表格中,然后更改“状态”的数据类型&#39;列到布尔值。
第2步。)使用原始表的数据修改最终表中状态列中的数据。
第1步:
ds = obj.openDataset(sql, Session["SchoolCode"].ToString());
DataTable dtOriginalTable = ds.Tables[0];
DataTable dtFinalTable = new DataTable();
foreach (DataColumn dc in dtOriginalTable.Columns)
{
dtFinalTable.Columns.Add(dc.ColumnName);
}
foreach (DataColumn dc in dtFinalTable.Columns)
{
if (dc.ColumnName == "status")
dc.DataType = System.Type.GetType("System.Boolean");
}
下面的第2步::
foreach (DataRow drow in dtOriginalTable.Rows)
{
if( drow["status"].ToString().Equals("Promoted"))
drow["status"]="true";
else
drow["status"]="false"
// ADD the row to final table
dtFinalTable.Rows.Add(drow.ItemArray);
}
现在将您的GridView绑定为:
grdstudents.DataSource = dtFinalTable ;// note we binded to final table
grdstudents.DataBind();
注意:: 为什么需要第1步?因为一旦填充了数据,就无法更改列的数据类型。
当数据库包含大量数据时,这也是一个性能问题。