2

列を非表示にして列ヘッダーを編集する次のコードがあります。しかし、それは foreach には入りません。foreachをDataBound、RowDataBound、RowCreatedイベントに入れて、さまざまな方法を試しました。しかし、機能していません。

GridView1.AutoGenerateColumns = true;
GridView1.DataSource = SomeObject[];
GridView1.DataBind();

foreach (DataControlField col in GridView1.Columns)
{
    if (col.HeaderText == "FirstName") 
    {
        col.HeaderText = "First Name"; 
    }
    if (col.HeaderText == "SchoolName") 
    { 
        col.Visible = false; 
    }
}

誰でも私に修正をアドバイスしてもらえますか。ありがとう

4

5 に答える 5

1

実行すると、列数が0になることに注意してくださいAutoGenereateColumns = true

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[index].Visible = false;
}

GridView の RowDataBound イベントを使用して非表示の列を設定します。

aspx ページでは、このように gridview コントロールで宣言できます

<asp:GridView runat="server" OnRowDataBound="GridView_RowDataBound" .../>
于 2013-10-08T15:46:41.197 に答える
1

代わりにこれを試してください:

int indexOfSchoolName = -1;
int columnIndex = -1;
foreach(TableCell cell in GridView1.HeaderRow.Cells)
{
    columnIndex ++;
    if (cell.Text == "FirstName") 
    { 
        cell.Text = "First Name"; 
    }
    if(cell.Text == "SchoolName") indexOfSchoolName = columnIndex;
} 
if(indexOfSchoolName != -1)
{
    foreach(GridViewRow row in GridView1.Rows)
    {
        row.Cells[indexOfSchoolName].Visible = false;
    }
}
于 2013-10-08T15:47:00.987 に答える
0

私は通常、次のようなことをします:

private int GetColumnIndexByName(GridView grid, string name)
{
    foreach (DataControlField col in grid.Columns)
    {
        if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim())
        {
            return grid.Columns.IndexOf(col);
        }
    }

    return -1;
}

GridView1.Columns[GetColumnIndexByName(GridView1, "SchoolName")].Visible = false;
于 2013-10-08T15:58:54.443 に答える
0

が配列の場合、必要な列を除外するために、この配列SomeObject[]のコピーを作成してSomeObject[]操作する必要がある場合があります。CopyObject[]最後に、グリッド ビューに再バインドします。

于 2013-10-08T15:58:04.817 に答える