Отображаю таблицу так:
string SqlText = "SELECT * FROM [Товар]";
SqlDataAdapter da = new SqlDataAdapter(SqlText, ConnStr);
DataSet ds = new DataSet();
da.Fill(ds, "[Товар]");
dataGridView1.DataSource = ds.Tables["[Товар]"].DefaultView;
А вот как сохранить? Может кто поможет с этим? Писал так но коряво
int rowCounter = dataGridView1.RowCount;
int columnCount = dataGridView1.ColumnCount;
string[] line = new string[columnCount];
Полагаю, вам нужно не сохранить, а обновить данные. Пользователь мог в датагриде какие-то данные добавить, изменить или удалить.
Для этого нужно вызвать метод Update.
Чтобы он правильно отработал, должны быть заданы свойства InsertCommand, UpdateCommand, DeleteCommand. В примере написано, как это сделать.
Подробнее смотрите Обновление источников данных с объектами DataAdapter.
Есть 2 варианта: полегче и посложнее.
1 - Построчно...
var connString = "MyConnectionString";
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
conn.Open();
for (int i = 0; i<dataGridView1.Rows.Count; i++)
{
var strQuery = "INSERT INTO tableName (column1, column2, ...)" +
"VALUES (@param1, @param2, ...)";
comm.CommandText = strQuery;
comm.Parameters.AddWithValue("@param1", dataGridView1.Rows[i].Cells[myColName1].Text);
comm.Parameters.AddWithValue("@param2", dataGridView1.Rows[i].Cells[myColName2].Text);
// больше параметров ...
comm.ExecuteNonQuery();
}
conn.Close();
}
}
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
2 - Через BulkCopy (и хранимые).
// приводим к DataTable а потом пушим во временную таблицу, например.
DataTable data = (DataTable)(dgvMyMembers.DataSource);
Хотя я рекомендовал бы второй подход только если вы знаете что делаете, а т.ж. у вас большой (очень большой) объем данных.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей