首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET GridView 列舉遍歷的三種寫法與效能比較

     編輯:ASP.NET 基礎

場景

需逐列檢查 GridView 中的 CheckBox 狀態,或取得特定欄位的 HyperLink 文字。

寫法一:for 迴圈 + 索引存取

int count = GridView1.Rows.Count;
for (int i = 0; i < count; i++)
{
    // 取得第 0 格的 HyperLink 文字
    string text = ((HyperLink)GridView1.Rows[i].Cells[0].Controls[0]).Text.Trim();

    // 尋找 CheckBox
    CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("CheckBox2");
    if (chk.Checked) { /* ... */ }
}

寫法二:foreach 遍歷 GridViewRow

foreach (GridViewRow row in GridView1.Rows)
{
    CheckBox chk = (CheckBox)row.FindControl("CheckBox2");
    if (chk != null && chk.Checked)
    {
        // 處理勾選列
    }
}

寫法三:LINQ to Objects(.NET 3.5+)

var checkedRows = GridView1.Rows.Cast<GridViewRow>()
    .Where(r => ((CheckBox)r.FindControl("CheckBox2")).Checked);

foreach (var row in checkedRows)
{
    // 處理
}

效能與適用性

寫法優點缺點建議場景
for + 索引可隨意跳躍、反向、步進程式碼較冗長需精確控制索引或非循序處理
foreach語意清晰、不易越界無法修改集合結構單純逐列處理、最常用
LINQ可組合篩選/投影、可讀性高微額外負擔複雜篩選條件、需投影新型別

常見陷阱

  • Header/Footer 列: GridView1.Rows 僅包含資料列,不含 Header/Footer/Pager,無需額外判斷 RowType。
  • FindControl 回傳 null: 若控制項在 EditItemTemplate 或 ItemTemplate 中,確認目前列狀態正確。
  • 分頁: 迴圈僅遍歷**目前頁面**的列,跨頁處理請參考「GridView 分頁保持選取」文章。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved