0

私のデータベース Web アプリケーションでは、次のコード スニペットを使用して、SQL テーブルから gridView の列にデータを追加しようとしています。

public void GetRowHeaders(GridView gridViewSample)
    {
        string commandstr = @"SELECT ID FROM WhiteBoardTest WHERE ID!=0 ORDER BY ID";

        SqlCommand rowHeaderCmd = new SqlCommand(commandstr, sqlcon);

        sqlcon.Open();
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter();

        da.SelectCommand = rowHeaderCmd;
        da.Fill(dt);


        for (int i = 0; i < dt.Columns.Count; i++)
        {
            for (int j = 0; j < dt.Rows.Count; j++)
            {              
                gridViewSample.Rows[0].Cells[j].Text = dt.Rows[j][i].ToString();
            }
        }

        sqlcon.Close();
    }

上記のコードを実行すると、次のエラーが表示されました

ArgumentOutOfRangeException: インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません

gridView に使用可能な行または列がないため、例外が発生したことを理解しています。

列に行を追加する方法を誰かに提案してもらえますか?またSqlDataSource、別のテーブルから gridView にもう 1 つの列を追加したいので、私は使用していません。

4

2 に答える 2

1

selectステートメントに追加の列を含めて、グリッドビューにバインドするだけです-そうしない特別な理由がない限り。新しいSQLに注意してください!

public void GetRowHeaders(GridView gridViewSample)
{
    string commandstr = @"SELECT a.*, b.somecolumn FROM tablea as a inner join tableb as b on b.someid= a.someid WHERE ID!=0 ORDER BY ID";

    SqlCommand rowHeaderCmd = new SqlCommand(commandstr, sqlcon);

    sqlcon.Open();
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter();

    da.SelectCommand = rowHeaderCmd;
    da.Fill(dt);

    gridViewSample.DataSource = dt;
    gridviewSample.DataBind();

    sqlcon.Close();
}

または、いくつかのクラスのコレクション (gridviews データバインドのプロパティを使用することを忘れないでください)、おそらくリストを作成し、それをグリッドにデータバインドすることもできます。

于 2013-09-12T18:58:21.947 に答える
1

Dayakar、あなたができることは、追加の列とデータをDataTable自体に追加してから、それをグリッドビューにバインドすることです. 以下はコード例です。

private void SetupGridView()
{
    var dt = GetDataTable();

    // add addition column
    dt.Columns.Add(new DataColumn() {ColumnName = "Id2", DataType = typeof (int)});

    // add additional data
    for (var i = 0; i < dt.Rows.Count; i++)
    {
        dt.Rows[i]["Id2"] = Convert.ToInt32(dt.Rows[i][0])*2;
    }

    GridView1.DataSource = dt;
    GridView1.DataBind();
}

2 つのデータテーブルをマージして 1 つのデータテーブルを作成し、それを gridview にバインドすることもできます。http://msdn.microsoft.com/en-us/library/fk68ew7b.aspxを参照してください

于 2013-09-12T19:00:15.377 に答える