有一个gridview控件,我想显示每行的复选框。只有在Session [“DisplayBox”] == true。
时才会出现复选框<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="False" EnableSortingAndPagingCallbacks="True"
AllowPaging="True" DataSourceID="JObjectDataSource" PageSize="5" OnRowCommand="gridView_RowCommand"
DataKeyNames="ID" Width="100%">
<Columns>
<asp:TemplateField HeaderText="Review">
<ItemTemplate>
<asp:CheckBox ID="chkRejectFile" AutoPostBack="true" runat="server" OnCheckedChanged="chkRejectFile_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
我删除了一些列并保留了我提出的问题。如何在aspx页面中放置条件代码并检查会话值?
此外,如果我页面,我是否必须明确处理跟踪检查哪一行,哪些不是?
答案 0 :(得分:2)
为GridView的OnDataBind事件添加回调处理程序。然后在每一行上,确定是否显示复选框。
代码当然会在您的 .cs 文件中。
答案 1 :(得分:1)
将新的事件属性添加到网格中,如下所示:
OnRowDataBound="gridView_RowDataBound"
然后,在代码隐藏中,添加以下相应的事件处理程序:
protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
// check for null first
object displayBoxFlag = Session["DisplayBox"];
if(displayBoxFlag!=null && (bool) displayBoxFlag)
{
e.Row.FindControl("chkRejectFile").Visible = true;
}
else
{
e.Row.FindControl("chkRejectFile").Visible = false;
}
}
}
有足够的优化空间,但它应该有效。
ASP.NET会引发此事件,并在绑定后立即为网格的每一行调用方法。您现在可以继续覆盖或自定义它们的显示方式。
答案 2 :(得分:0)
您希望根据会话变量的值设置Visible属性。在控件中添加以下(未经测试的)代码:
Visible='<%# Convert.ToBoolean(HttpContext.Current.Session["DisplayBox"]) %>'
请注意,这不会检查会话变量是否实际定义,即它取决于它是否已设置并设置为true
或false
。
如果您进行分页并关心保留已检查状态,则需要明确跟踪每个项目的已检查状态。唯一会在提交时回发的是在提交时页面上实际存在的控件。
答案 3 :(得分:0)
您可以在后面的代码中覆盖“RowDataBound”事件,并为每一行执行逻辑并相应地设置visible属性。