Reputation: 2256
I have a datagrid (grid_detail),since now i have been only reading a single row of it and saving to database using codes below
//number of columns actually in second dgv
int col_no = grid_detail.ColumnCount;
int row_no = grid_detail.RowCount - 1;
int r = 0;
//array to contain the values of the cells
string[] col_value = new string[100];
for (i = 0; i < col_no; i++)
{
//fill in the Array with values from cells
col_value[i] = Convert.ToString(grid_detail.Rows[0].Cells[i].Value);
}
//Build insert command
StringBuilder Q = new StringBuilder();
Q.Append("INSERT INTO ");
Q.Append("[Ref].[");
Q.Append(_lstview_item);
Q.Append("]");
Q.Append(" VALUES");
Q.Append("(");
for (i = 0; i < col_no; i++)
{
Q.Append("'");
if (string.IsNullOrEmpty(col_value[i]))
{
x = false;
break;
}
else
{
Q.Append(col_value[i]);
Q.Append("'");
Q.Append(",");
x = true;
}
}
//removing last COMMA from loop
if (col_no > 0)
{
Q.Length--;
}
Q.Append(")");
query = Q.ToString();
if (x == true)
{
//open connection to db and send query
SqlConnection conn = new SqlConnection(cc.connectionString(cmb_dblist.Text));
SqlCommand cmd_server = new SqlCommand(query);
cmd_server.CommandType = CommandType.Text;
cmd_server.Connection = conn;
conn.Open();
cmd_server.ExecuteNonQuery();
conn.Close();
However,my requirements are that I now read MORE THAN one row of z grid and save to database. i tried using a for loop for the number of rows like
for (r=0;r<row_no;r++)
{
/////CODES ABOVE PASTED HERE
}
I am unable to do the loop.
Help please.
Upvotes: 1
Views: 885
Reputation: 63065
i assume you have row_no
set according to grid_detail row count, then do below changes and test
for (int r=0; r< grid_detail.RowCount; r++)
{
// your code...
//int r = 0; comment this line
// your code...
//.............
for (i = 0; i < col_no; i++)
{
//fill in the Array with values from cells
col_value[i] = Convert.ToString(grid_detail.Rows[r].Cells[i].Value); // use row r
}
//.............
// your code...
}
but I would re factor your code to below
foreach (GridViewRow row in GridView1.Rows)
{
string sql = GenerateSql(row);
if (!string.IsNullOrEmpty(sql))
ExecuteNonQuery(sql);
}
private void ExecuteNonQuery(string query)
{
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd_server = new SqlCommand(query, conn))
{
conn.Open();
cmd_server.ExecuteNonQuery();
}
}
private string GenerateSql(GridViewRow row)
{
var values = row.Cells.Cast<TableCell>().Select(x => x.Text).ToArray();
if (values.Any(string.IsNullOrEmpty))
{
return string.Empty;
}
var sql = string.Format("INSERT INTO [Ref].[{0}] VALUES ({1})", _lstview_item, string.Join(",", values));
return sql;
}
Upvotes: 1