0

特定の行の色をグリッド ビューに変更したいので、 rowdataboundgridviewイベントで行を検索する必要があります。行を見つける方法は?

ソースコード:

protected void Page_Load(object sender, EventArgs e)
{
    string[] arr={"1","2","3","4"};
    GridView1.DataSource = arr;
    GridView1.DataBind();
}
protected void pagechangin(object sender, GridViewPageEventArgs e) {
    GridView1.PageIndex = e.NewPageIndex;
}
protected void databound(Object sender, GridViewRowEventArgs e) {
    GridViewRow grv=GridView1.Rows[0];
}
4

2 に答える 2

2

イベントを処理するには、イベント ハンドラーを登録する必要があります。ただし、aspx マークアップを表示していないため、ハンドラーを宣言的に追加していない可能性があります。

<asp:gridview id="GridView1" 
    onrowdatabound="GridView1_RowDataBound" 
    runat="server">
  </asp:gridview>

void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
         // e.Row is the GridViewRow
         e.Row.BackColor = System.Drawing.Color.Green;
    }
}

更新理由はIndexOutOfRangeException、最初の行が作成される前にアクセスしているためです。

GridViewRow grv=GridView1.Rows[0];

これは厄介なものです。は、 だけでなく、 、およびに対してもRowDataBound呼び出されます。最初に作成されるのは. しかし、=でのみ返されます。したがって、行の作成中に最初の「データ行」にアクセスしようとしています。GridViewRowDataItemsHeaderFooterPagerHeaderGridView.RowsGridViewRowsRowTypeDataRowheader

修正するには、上記のコードを使用してRowType.

if(e.Row.RowType == DataControlRowType.DataRow)
{
    // now you ca safely access the first row in this way, 
    // altghough i assume that you should use my code above 
    // to set the color of every GridViewRow
    GridViewRow grv=GridView1.Rows[0]; 

それとは別に、(デフォルト)を使用している場合は、ドラガンが言及したようDataBindにグリッドのみを使用する必要があります。if(!IsPostBack)ViewState

于 2013-02-11T13:38:53.660 に答える
1

page_loadイベントハンドラーが正しくありません。Yoouは、ページの読み込みごとにデータを読み込むのではなく、最初の読み込み時にのみデータを読み込む必要があります。多分これは問題を引き起こしています。

Page_Loadメソッドでこれを試してください

if (!Page.IsPostback)
{
    //copy your code from above
} 
于 2013-02-11T13:50:14.833 に答える