在不使用Sql表中的SqlDataSource和DataBind的情况下将数据插入到gridView中

时间:2013-09-12 18:22:52

标签: c# asp.net sql sql-server gridview

在我的数据库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添加一列。

2 个答案:

答案 0 :(得分:1)

我只需在select语句中包含额外的列,然后绑定到gridview - 除非有特殊原因不这样做。注意新的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数据绑定的属性),列表可能,并且只是数据绑定到网格。

答案 1 :(得分:1)

Dayakar,您可以做的是向DataTable本身添加其他列和数据,然后将其绑定到gridview。下面是一个示例代码。

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();
}

您还可以合并两个数据表以创建一个数据表,然后将其绑定到gridview。请参阅http://msdn.microsoft.com/en-us/library/fk68ew7b.aspx