asp.net VS2008中的gridview

时间:2009-01-07 03:27:06

标签: c# asp.net

有一个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页面中放置条件代码并检查会话值?

此外,如果我页面,我是否必须明确处理跟踪检查哪一行,哪些不是?

4 个答案:

答案 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"]) %>'

请注意,这不会检查会话变量是否实际定义,即它取决于它是否已设置并设置为truefalse

如果您进行分页并关心保留已检查状态,则需要明确跟踪每个项目的已检查状态。唯一会在提交时回发的是在提交时页面上实际存在的控件。

答案 3 :(得分:0)

您可以在后面的代码中覆盖“RowDataBound”事件,并为每一行执行逻辑并相应地设置visible属性。