View Full Version : انتقال محتویات DatagridView به یک Datatable
Mahdad999
سه شنبه 18 تیر 1392, 16:50 عصر
با سلام،
من روی فرمم یه Datagridview دارم و میخوام تمام ردیف های اون رو (که متغیر هستش) به یه Datatable وارد کنم. ممنون میشم اگه راهنمایی بفرمایید./
amir200h
سه شنبه 18 تیر 1392, 16:59 عصر
با فرض اینکه نام دیتاگرید ویوو شما dtg و نام دیتا تیبلی که میخواین مقادیر رو توش بریزین dt باشه:
var dt = ((DataTable)dtg.DataSource).Copy();
Mahdad999
سه شنبه 18 تیر 1392, 17:41 عصر
با فرض اینکه نام دیتاگرید ویوو شما dtg و نام دیتا تیبلی که میخواین مقادیر رو توش بریزین dt باشه:
var dt = ((DataTable)dtg.DataSource).Copy();
ضمن تشکر، اگه datagridview من bind شده نباشه چی؟ در اصل من Datagridview رو دستی مقدار دادم و DataSource براش تعریف نشده و فقط برای نمایش ازش استفاده کردم و میخوام اطلاعات داخلش رو با Datatable به محیط گزارش گیری بفرستم...
مهرداد صفا
سه شنبه 18 تیر 1392, 19: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, 23: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, 19: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);
}
}
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.