2010-10-18 31 views
0

我有一個數據綁定的GridView控件,其中我可以根據用戶角色禁用單個單元。這隻適用於第一頁。使用ASP.NET GridView控件,如何在PageIndexChanged後禁用GridViewRow中的控件或單個單元格?

private void LimitAccessToGridFields() 
    { 
     if (User.IsInRole("Processing")) return; 

     foreach (GridViewRow gridViewRow in gvScrubbed.Rows) 
     { 
      var checkBox = ((CheckBox) gridViewRow.FindControl("cbScrubbed")); 
      checkBox.Enabled = false; 

      // ButtonField does not have an ID to FindControl with 
      // Must use hard-coded Cell index 
      gridViewRow.Cells[1].Enabled = false; 
     } 
    } 

我在Page_Load上調用了這個方法,它在那裏工作。我試過它在PageIndexChaging和PageIndexChanged事件處理程序中,它不起作用。在調試時,它似乎在該行的兩個控件中成功設置爲Enabled。我的目標是在更改頁面後根據用戶角色禁用這些字段。這應該如何完成?

回答

0

我發現這必須在RowDataBound事件處理程序中完成。

if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    // details elided ... 

    // Limits the access to grid fields. 
    if (!User.IsInRole("PROCESSING")) 
    { 
     cbstuff.Enabled = false; // a checkbox 
     e.Row.Cells[1].Enabled = false; //a link button 
    } 
} 
+0

不需要。它不在RowDataBound事件中。此外,並非所有的GridView控件都依賴於數據源。 – Fandango68 2016-05-31 02:12:44

1

您不需要遍歷任何控件來禁用或隱藏/可見它們。

GridView控件中的每個單元格在呈現時實際上都是HTML表格引用(使用FireFly或Inspector查看頁面中的代碼)。

那麼爲什麼不遍歷所有的單元格,以及在每個單元格中找到的任何控件,只是禁用它們?或者,您可以簡單地遍歷GridView的每一行並直接禁用或隱藏它,這將影響行內的所有內容。

使用表格單元格參考示例隱藏:

foreach (GridViewRow gRow in myGridView.Rows) 
      { 
       if (gRow.RowType == DataControlRowType.DataRow) 
       { 
         TableCellCollection tbcCol = (TableCellCollection)gRow.Cells; 
         foreach (TableCell tblCell in tbcCol) 
           tblCell.Enabled = false; 
       } 
      } 

所以將由表格單元禁用一切表格單元格。

或..爲什麼不只是禁用整個行?

foreach (GridViewRow gRow in myGridView.Rows) 
      { 
       if (gRow.RowType == DataControlRowType.DataRow) 
        gRow.Enable = false; 
      } 

如果需要針點或過濾特定的控制類型(複選框,文本框,標籤等),隻影響這些控件然後簡單地測試他們!

foreach (GridViewRow gRow in myGridView.Rows) 
{ 
    if (gRow.RowType == DataControlRowType.DataRow) 
    { 
    TableCellCollection tbcCol = (TableCellCollection)gRow.Cells; 
    foreach (TableCell tblCell in tbcCol) 
     if (((TextBox)tblCell) != null) 
      ((TextBox)tblCell).Enable = false; 
    } 
} 
相關問題