2013-09-12 1 views
0

В моем веб-приложений баз данных, я пытаюсь добавить данные в столбце в GridView из таблицы SQL, используя следующий фрагмент кодаВставка данных в GridView без использования SqlDataSource и DataBind из таблицы Sql

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

Я бы просто добавил дополнительный столбец в свой оператор 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 DataBind), список может быть, и просто DataBind, что к сетке.

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

Вы также можете объединить два типа данных для создания одного datatable, а затем привязать его к gridview. Refer http://msdn.microsoft.com/en-us/library/fk68ew7b.aspx

Смежные вопросы