'No row at position' when assigning column value to a dataset in c#

734 views Asked by At

I am trying to execute following code. All I am trying to do is to copy one column from a dataset into one of the columns of another dataset. The code is as follows:

    int i=0
    foreach (DataRow dr in ds_input.Tables[0].Rows)
    {
     ds_output.Tables["output"].Rows[i]["Serial_Number"] = dr["Serial Number"].ToString();
i++;
    }

While assigning column value of dr to ds, the compiler returns the following error:

There is no row at position 0.

Despite making the following addition, it returns the same error:

   int i=0;
     foreach (DataRow dr in ds_input.Tables[0].Rows)
     {
         ds_output.Tables["output"].NewRow();
         ds_output.Tables["output"].Rows[i]["Serial_Number"] = dr["Serial Number"].ToString();
     i++;}
1

There are 1 answers

2
Tim Schmelter On BEST ANSWER

You have to add the DataRow to the DataTable. If the output- and the input-tables have the same columns you could use DataTable.Clone to clone the table which does not copy the data. Then you can either use DataTable.ImportRow to create a copy of the DataRow from the input table and add that to the output-table. Or you could use table.Rows.Add to add a new DataRow and use the ItemArray(all fields) of the input-DataRow:

DataSet ds_output = new DataSet();
DataTable tblOutput = ds_input.Tables[0].Clone();
ds_output.Tables.Add(tblOutput);
foreach (DataRow dr in ds_input.Tables[0].Rows)
{
    tblOutput.ImportRow(dr);
    // or:
    DataRow newRow = tblOutput.Rows.Add();
    newRow.ItemArray = dr.ItemArray;
}

If you want to create a complete copy of the input-table you can use DataTable.Copy:

DataTable tblOutput = ds_input.Tables[0].Copy(); // nothing more needed