PDA

View Full Version : انتقال اطلاعات datagrid به datatable



ashe405
سه شنبه 04 مهر 1391, 11:37 صبح
سلام دوستان
من یه گرید ویو دارم میخام اطلاعاتشو بریزم توی یه جدول dataTable
میشه راهنمایی کنین اصلا میتونم این کار رو انجام بدم ممنون

Mahmoud Zaad
سه شنبه 04 مهر 1391, 11:59 صبح
سلام
میشه،
اول یه دیتا تیبل تعریف می کنید و به تعداد ستون های دیتاگریدتون براش ستون تعریف می کنید بعد هم مقدار دهی می کنید در این مثال (http://barnamenevis.org/showthread.php?312844-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%D8%A7%D8%B1%D9%85%D8%AA%D8%B1%D9%87%D8%A7%D B%8C-%DB%8C%DA%A9-%DA%AF%D8%B1%DB%8C%D8%AF-%D9%88%DB%8C%D9%88-%D8%A8%D9%87-%DA%A9%D8%B1%DB%8C%D8%B3%D8%AA%D8%A7%D9%84-%D8%B1%DB%8C%D9%BE%D9%88%D8%B1%D8%AA) اطلاعات دیتاگریدویو رو در یه دیتاتیبل ریختم و به کریستال ریپورت ارسال کردم.

morteza271
سه شنبه 04 مهر 1391, 12:01 عصر
این یه تابع که این کار رو براتون انجام میده:
private DataTable MoveToDataTable(DataGridView dgv)
{
DataTable dt = new DataTable();
for (int i = 0; i < dgv.Columns.Count; i++)
dt.Columns.Add(dgv.Columns[i].Name);

for (int i = 0; i < dgv.RowCount; i++)
{
DataRow drNew = dt.NewRow();
for (int j = 0; j < dgv.Columns.Count; j++)
{
drNew[j] = dgv.Rows[i].Cells[j].Value.ToString();
}
dt.Rows.Add(drNew);
}
return dt;
}

ashe405
سه شنبه 04 مهر 1391, 12:12 عصر
ممنونم
من فکر می کردم مثل یه table رو به DataSource یه دیتا گرید ویو میریزیم میشه برعکسشم عمل کرد بازم متشکر و سپاسگزارم دوستان خداخیرتون بده دوستانم

morteza271
سه شنبه 04 مهر 1391, 12:20 عصر
راست میگی ها!!!
اینطوری هم میشه دوست عزیز :
DataTable dt2 = dataGridView1.DataSource as DataTable;

البته به شرطی که حتما DataSource واسه دیتاگریدویو ست کنین.
موفق باشید

ashe405
سه شنبه 04 مهر 1391, 12:24 عصر
private DataTable MoveToDataTable(DataGridView dgv)
{
DataTable dt = new DataTable();
for (int i = 0; i < dgv.Columns.Count; i++)
dt.Columns.Add(dgv.Columns[i].Name);

for (int i = 0; i < dgv.RowCount; i++)
{
DataRow drNew = dt.NewRow();
for (int j = 0; j < dgv.Columns.Count; j++)
{
if (dgv.Rows[i].Cells[j].Value != null)
{
drNew[j] = dgv.Rows[i].Cells[j].Value.ToString();
}
}
dt.Rows.Add(drNew);
}
return dt;
}

ashe405
سه شنبه 04 مهر 1391, 12:34 عصر
زنده باشی دوست من
من خودم


DataTable dt = dataGridView1.DataSource;

نوشتم ارور میداد نمی دونستم که باید کاملتر بنویسم که شما این کد رو گذاشتین امتحان کردم درست جواب داده ممنون خدا خیرتون بده دوست من سپاسگزارم

morteza271
سه شنبه 04 مهر 1391, 12:43 عصر
کد دومی که گذاشتم که خطایی نمیده،درسته؟
من خودم تست کردم درست بود!

ali_habibi1384
سه شنبه 04 مهر 1391, 13:02 عصر
زنده باشی دوست من
من خودم


DataTable dt = dataGridView1.DataSource;

نوشتم ارور میداد نمی دونستم که باید کاملتر بنویسم که شما این کد رو گذاشتین امتحان کردم درست جواب داده ممنون خدا خیرتون بده دوست من سپاسگزارم
اگر شما قبلا ديتا سورس رو به ديتاتيبل وصل كرده بودي كه كلا مسله حل بود و با كدي كه شما خودت نوشته بودي تموم ميشد اما شما كه اونو وصل نكردي پس به روش دوستمون عمل كن چون شما ديتا سورستون نال هست

ashe405
پنج شنبه 06 مهر 1391, 11:33 صبح
اگر شما قبلا ديتا سورس رو به ديتاتيبل وصل كرده بودي كه كلا مسله حل بود و با كدي كه شما خودت نوشته بودي تموم ميشد اما شما كه اونو وصل نكردي پس به روش دوستمون عمل كن چون شما ديتا سورستون نال هست
سلام منظورتونو از این متوجه نشدم اگه منظورتون اینه که گریدویو اطلاعات داره که داره و اون خط که نوشته بودم ارور میداد

tooraj_azizi_1035
جمعه 07 مهر 1391, 12:04 عصر
باید از متد CopyToDataTable() استفاده کنی:

// Bind the System.Windows.Forms.DataGridView object



// to the System.Windows.Forms.BindingSource object.



dataGridView.DataSource = bindingSource;



// Fill the DataSet.



DataSet ds = new DataSet();

ds.Locale = CultureInfo.InvariantCulture;

FillDataSet(ds);



DataTable orders = ds.Tables["SalesOrderHeader"];



// Query the SalesOrderHeader table for orders placed



// after August 8, 2001.



IEnumerable<DataRow> query =

from order in orders.AsEnumerable()

where order.Field<DateTime>("OrderDate") > new DateTime(2001, 8, 1)

select order;



// Create a table from the query.



DataTable boundTable = query.CopyToDataTable<DataRow>();



// Bind the table to a System.Windows.Forms.BindingSource object,



// which acts as a proxy for a System.Windows.Forms.DataGridView object.



bindingSource.DataSource = boundTable;





منبع: http://www.farsimsdn.somee.com/Default.aspx?id=129

dariavosh
چهارشنبه 23 مهر 1393, 11:47 صبح
از این تکه کد کوچولو استفاده کنید مطمئن باشید جواب میده:

BindingSource bs = new BindingSource();

bs.DataSource = dataGridView1.DataSource;


DataTable dat = (DataTable)(bs.DataSource);
بعد اگه دوس داشتید دیتاتیبل dat را بریزید تو دیتاست :

DataSet ds = new DataSet();

ds.Merge(dat);


ds.Tables[0].TableName = "dat";

علی فتحی
سه شنبه 15 اردیبهشت 1394, 00:21 صبح
با انتی تی میشه اینکارو کرد؟

csharp.net
سه شنبه 15 اردیبهشت 1394, 07:13 صبح
DataTable DataTable1 = new DataTable();
for (int ColumnCounter = 0; ColumnCounter < dataGridView1.Columns.Count; ColumnCounter++)
DataTable1.Columns.Add(dataGridView1.Columns[ColumnCounter].Name);

for (int RowCounter = 0; RowCounter < dataGridView1.Rows.Count; RowCounter++)
{
DataRow DataRow1 = DataTable1.NewRow();
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
DataRow1[j] = dataGridView1.Rows[RowCounter].Cells[j].Value.ToString();
}
DataTable1.Rows.Add(DataRow1);
}