PDA

View Full Version : انتقال محتویات DatagridView به یک Datatable



Mahdad999
سه شنبه 18 تیر 1392, 15:50 عصر
با سلام،
من روی فرمم یه Datagridview دارم و میخوام تمام ردیف های اون رو (که متغیر هستش) به یه Datatable وارد کنم. ممنون میشم اگه راهنمایی بفرمایید./

amir200h
سه شنبه 18 تیر 1392, 15:59 عصر
با فرض اینکه نام دیتاگرید ویوو شما dtg و نام دیتا تیبلی که میخواین مقادیر رو توش بریزین dt باشه:
var dt = ((DataTable)dtg.DataSource).Copy();

Mahdad999
سه شنبه 18 تیر 1392, 16:41 عصر
با فرض اینکه نام دیتاگرید ویوو شما dtg و نام دیتا تیبلی که میخواین مقادیر رو توش بریزین dt باشه:
var dt = ((DataTable)dtg.DataSource).Copy();

ضمن تشکر، اگه datagridview من bind شده نباشه چی؟ در اصل من Datagridview رو دستی مقدار دادم و DataSource براش تعریف نشده و فقط برای نمایش ازش استفاده کردم و میخوام اطلاعات داخلش رو با Datatable به محیط گزارش گیری بفرستم...

مهرداد صفا
سه شنبه 18 تیر 1392, 18:10 عصر
با سلام.
ابتدا با استفاده از متود DataTable.Columns.Add|AddRange ستون ها را اضافه کنید و سپس در یک حلقه محتویات ردیفها را به DataTable اضافه کنید:

DataTable table = new DataTable();
table.Columns.AddRange(dataGridView1.Columns.Cast<DataGridViewColumn>().Select(c => new DataColumn(c.Name)).ToArray());
foreach (DataGridViewRow row in dataGridView1.Rows)
table.Rows.Add(row.Cells.Cast<DataGridViewCell>().Select(cell => cell.Value).ToArray());

Mahdad999
چهارشنبه 19 تیر 1392, 22:00 عصر
با سلام.
ابتدا با استفاده از متود DataTable.Columns.Add|AddRange ستون ها را اضافه کنید و سپس در یک حلقه محتویات ردیفها را به DataTable اضافه کنید:

DataTable table = new DataTable();
table.Columns.AddRange(dataGridView1.Columns.Cast<DataGridViewColumn>().Select(c => new DataColumn(c.Name)).ToArray());
foreach (DataGridViewRow row in dataGridView1.Rows)
table.Rows.Add(row.Cells.Cast<DataGridViewCell>().Select(cell => cell.Value).ToArray());


با سلام، اگه ممکنه یه مثال عملی بزنید، من نحوه کاربرد دو قسمت کد رو متوجه نشدم:

table.Columns.AddRange(dataGridView1.Columns.Cast< DataGridViewColumn>().Select(c => new DataColumn(c.Name)).ToArray());

و:
foreach (DataGridViewRow row in dataGridView1.Rows)
table.Rows.Add(row.Cells.Cast<DataGridViewCell>(). Select(cell => cell.Value).ToArray());

Mahdad999
پنج شنبه 20 تیر 1392, 18:34 عصر
با تشکر از دوستان مشکل حل شد از این روش استفاده کردم:
جهت انتقال اطلاعات یک دیتاگریدویو فاقد دیتا سرس (اطلاعات دیتاگرید ویو به صورت دستی ست شده است) بصورت زیر عمل مینماییم:


DataTable dt = new DataTable();
private void getDgvToDt()
{
//کپی دیتا گرید در دیتا تیبل وقتی دیتا سرس وجود داشته باشد
//var dt2 = ((DataTable)dataGridView1.DataSource).Copy();
//
//کپی دیتا گرید در دیتا تیبل وقتی دیتا سرس وجود داشته نباشد

//table.Columns.AddRange(dataGridView1.Columns.Cast<DataGridViewColumn>().Select(c => new DataColumn(c.Name)).ToArray());
dt.Columns.Add("StartDate");
dt.Columns.Add("EndDate");
dt.Columns.Add("Name");
DataRow row;

foreach (DataGridViewRow dgvr in dataGridView1.Rows)
//dt.Rows.Add(row.Cells.Cast<DataGridViewCell>().Select(cell => cell.Value).ToArray());
{
row = dt.NewRow();
row["StartDate"] = dgvr.Cells["ClmnStartDate"].Value.ToString();
row["EndDate"] = dgvr.Cells["ClmnEndDate"].Value.ToString();
row["Name"] = dgvr.Cells["ClmnName"].Value.ToString();

dt.Rows.Add(row);
}


}