簡體   English   中英

ASP.NET VS2008中的gridview

[英]gridview in asp.net VS2008

有一個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頁面中放置條件代碼並檢查會話值?

另外,如果我要翻頁,是否必須顯式處理跟蹤已檢查的行和未檢查的行?

為GridView的OnDataBind事件添加一個回調處理程序。 然后在每一行上,確定是否顯示該復選框。

該代碼當然會在您的.cs文件中。

像這樣向網格添加一個新的事件屬性:

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將在綁定它們后立即引發此事件並為網格的每一行調用該方法。 現在,您可以繼續並覆蓋或自定義它們的顯示方式。

您要基於會話變量的值設置Visible屬性。 將類似以下(未經測試)的代碼添加到您的控件中:

 Visible='<%# Convert.ToBoolean(HttpContext.Current.Session["DisplayBox"]) %>'

請注意,這不會檢查會話變量是否已實際定義,即取決於它是否被設置並設置為truefalse

如果進行分頁並關心保留已檢查狀態,則需要明確跟蹤每個項目的已檢查狀態。 提交回發的唯一一件事就是提交時頁面上實際存在的控件。

您可以在后面的代碼中覆蓋“ OnRowDataBound”事件,並針對每一行執行邏輯並相應地設置visisble屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM