0

12 の日付を含む dayList という名前のリストがあります。このリストを GridView 列にバインドしようとしています。

  GridView2.DataSource = dayList;

        GridView2.DataBind();

        for (int i = 0; i < dayList.Count; i++)
        { 
            Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
            lbldate.Text = Convert.ToString(dayList[i]);
        }
    }

オブジェクト参照がオブジェクトのインスタンスに設定されていませんというエラーが表示されます:

lbldate.Text = Convert.ToString(dayList[i]);

GridView に行がないからですか? しかし、GridView Column を DataTable にバインドするときと同じように、GridView が自動的に行を追加するべきではありませんか?

4

3 に答える 3

1

@manish-mishraが言ったように、なぜあなたはこれをしているのですか? 以下のものだけあれば十分です。

GridView2.DataSource = dayList;
GridView2.DataBind();

lblgriddateコントロールのテキストを設定する場合DataItemは、rowtemplate の にバインドするように設定する必要があります。

        var dayList = new List<DateTime>() { 
            DateTime.Today, 
            DateTime.Today.AddDays(-1), 
            DateTime.Today.AddDays(-2) 
        };
        GridView2.DataSource = dayList;
        GridView2.DataBind();

HTML の場合:

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:TemplateField HeaderText="Date">
                <ItemTemplate>
                    <asp:Label ID="lblgriddate" Text="<%# Container.DataItem %>" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

DataBind()次に、呼び出しの後に次のコードを追加しましたが、これも機能します。といっても何も変わりません。ラベル自体は既に値にデータバインドされているため、コードで明示的にバインドする必要はありません。

        for (int i = 0; i < dayList.Count; i++)
        {
            Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
            lbldate.Text = Convert.ToString(dayList[i]);
        }
于 2013-03-07T13:06:29.527 に答える
0

存在すらしていないGridViewの行にアクセスしようとしています。

gridViewの単一の列をバインドしようとしているのはなぜですか?

次の2つのいずれかを実行する必要があります。

  1. gridViewあなたのdayListieと直接バインドします

     GridView2.AutoGenerateColumns=true;
     GridView2.DataSource = dayList;
     GridView2.DataBind();
    
  2. GridViewを少なくとも12行の代替データソースにバインドして、GridViewに行が含まれるようにしてRowDataBoundから、(グリッド)またはその直後の列の1つをdataBindingDayListの値で更新します。

    for (int i = 0; i < dayList.Count; i++)
    { 
        Label lbldate = (Label)GridView2.Rows[i].FindControl("lblgriddate");
        lbldate.Text = Convert.ToString(dayList[i]);
    }
    

RowDataBound内

    protected void Review_grid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Cells[2].Text = DayList[e.Row.RowIndex];

        }
    }

それはあなたにアイデアを与えるはずです:

DayListまた、コレクションをコレクションに変換して、GridViewRow に追加することもできます。参考文献を参照してください。ControlsGridView

于 2013-03-07T12:51:32.517 に答える
0

新しいDataGridViewRowオブジェクトabdを作成してから、リストから行にアイテムを追加します。これを行った後、この行をグリッドビューに追加します。これはあなたがやろうとしていることをします

于 2013-03-07T13:24:01.533 に答える