0

ListBox行数と一致する数のアイテムがありますGridView。これListBoxを使用して、各行のツールチップを の最初の列のデータのみに表示したいと考えていますGridViewGridViewフロントエンドにバインドしました。

私が試したコードは、範囲外エラーのインデックスを与えています:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            for (int i = 0; i <= GridView1.Rows.Count; i++)
            {
                String ProCol = GridView1.Rows[i].Cells[0].ToString();

                if (ProCol.Length != 0)
                {
                    e.Row.Cells[0].ToolTip = ListBox1.Items[i].ToString().Trim();
                }
            }
        }
    }
4

2 に答える 2

3

インデックスがゼロベースであるため、 for サイクルの最後の反復で失敗します (最初のアイテムには 0 インデックスがあり、最後のアイテムにはcount-1インデックスがあります)。交換

i <= GridView1.Rows.Count

i < GridView1.Rows.Count
于 2012-09-10T07:10:28.407 に答える
2

で作業を行う代わりに、コードをDataBoundイベントに移動してみてください。このように、すべての行がバインドされ、コレクションが初期化されたときに1回だけ実行されます。GridViewRowDataBoundGridView.Rows

また、MichalKloudaが彼の回答に書いたことを実行する必要が<=あります<

ListBox1また、をバインドする前に、がデータバインドされていることを確認する必要がありますGridView

ListBoxbefor GridView:をバインドする限り機能するサンプルコード

protected void GridView1_DataBound(object sender, EventArgs e)
{
    var gv = (GridView)sender;
    for (int i = 0; i < gv.Rows.Count; i++)
    {
        var oneRow = gv.Rows[i];
        String ProCol = oneRow.Cells[0].ToString();

        if (ProCol.Length != 0)
        {
            oneRow.Cells[0].ToolTip = ListBox1.Items[i].ToString().Trim();
        }
    } 

}
于 2012-09-10T09:28:21.540 に答える