PDA

View Full Version : انتقال اطلاعات از یک datagrid به دیتاگریدی در فرم دیگر



Iman7228
یک شنبه 14 آبان 1396, 20:33 عصر
سلا مهندسین و اساتید عزیز.
یه سوال داشتم و انتظار دارم پاسخ درست دریافت کنم.
میخوام از یک دیتاگرید که اطلاعاتش از دیتابیس گرفته میشه، با استفاده از چکباکس، سطرهایی که تیک دار میشن رو به دیتاگرید دیگه در فرم دیگری انتقال بدم.
یه چیزایی نوشتم.اما فقط یک سطر منتقل میشه.میخواستم راهنمایی کنین.سپاس فراوان



private void button1_Click(object sender, EventArgs e)
{


List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["check"].Value) == true
select row).ToList();


foreach (DataGridViewRow row in selectedRows)
{
{
Form1 frm= new Form1 ();


int i = 0;
DataGridViewRow r = new DataGridViewRow();
frm.dataGridView1.Rows.Add(r);
frm.dataGridView1.Rows[i].Cells["name"].Value = row.Cells["name"].Value.ToString();
frm.dataGridView1.Rows[i].Cells["family"].Value = row.Cells["family"].Value.ToString();
frm.dataGridView1.Rows[i].Cells["family"].Value = row.Cells["age"].Value.ToString();
i++;
this.Hide();
frm.ShowDialog();
}
}
}

ژیار رحیمی
یک شنبه 14 آبان 1396, 21:12 عصر
سلام خب مشخصه شما متغییر فرم را داخل حلقه تعریف کردی یعنی به ازای هر بار اجرا حلقه for متغییر شما مجدد ساخته میشود.متغییر r را با مقادیر مقداردهی نمایید بعد به DataGrid اضافه کنید.

private void button1_Click(object sender, EventArgs e)
{

List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["check"].Value) == true
select row).ToList();

var frm= new Form1 ();
var r = new DataGridViewRow();
foreach (DataGridViewRow row in selectedRows)
{
r = new DataGridViewRow();
r.Cells["name"].Value = row.Cells["name"].Value.ToString();
r.Cells["family"].Value = row.Cells["family"].Value.ToString();
r.Cells["age"].Value = row.Cells["age"].Value.ToString();
frm.dataGridView1.Rows.Add(r);
}
this.Hide();
frm.ShowDialog();
}

Iman7228
یک شنبه 14 آبان 1396, 21:22 عصر
ممنونم. چرا خطای Column named name cannot be found میده؟
با اینکه ستونها تعریف شده ست

ژیار رحیمی
یک شنبه 14 آبان 1396, 21:32 عصر
نام ستون ها رو در دیتاگرید منبع چک کنید .در کد شما دوتا نام ستون family ست شده است .من آخریو تبدیل به age کردم احتمالا خطا از اونجا ناشی شده است. موفق باشید

Iman7228
یک شنبه 14 آبان 1396, 21:38 عصر
نام ستون ها رو در دیتاگرید منبع چک کنید .در کد شما دوتا نام ستون family ست شده است .من آخریو تبدیل به age کردم احتمالا خطا از اونجا ناشی شده است. موفق باشید
چک کردم ، همه چی درسته مهندس.با کد قبلی فقط یه ردیف رو ثبت میکرد.خطا نمیداد.

ژیار رحیمی
یک شنبه 14 آبان 1396, 21:43 عصر
ستون های DataGrid منبع با ستون های Datagrid مقصد یکی هست؟ اگر مشکل همچنان باقیست با کد قبلی خودتان انجام بدهید فقط متغییر Form را خارج از حقله for تعریف کن ببین مشکل حل میشه

Iman7228
یک شنبه 14 آبان 1396, 21:48 عصر
ستون های منبع و مقصد یکیه.درواقع از یه دیتاگرید استفاده کردم برای هر دو فرم.
کد رو به این صورت اصلاح کردم. منتها تعداد سطرهای انتخاب شده رو در فرم جدید انتقال مبده، اما فقط یک سطر دارای اطلاعات و محتویات هست و سطرهای انتخابیه دیگه، خالی از اطلاعات هست





private void button1_Click(object sender, EventArgs e)
{
List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["check"].Value) == true
select row).ToList();
Form1 frm = new ّForm1();


foreach (DataGridViewRow row in selectedRows)
{
int i = 0;
DataGridViewRow r = new DataGridViewRow();
frm.dataGridViewX1.Rows.Add(r);
frm.dataGridViewX1.Rows[i].Cells["name"].Value = row.Cells["name"].Value.ToString();
frm.dataGridViewX1.Rows[i].Cells["family"].Value = row.Cells["family"].Value.ToString();
frm.dataGridViewX1.Rows[i].Cells["father"].Value = row.Cells["father"].Value.ToString();
i++;
}
this.Hide();
frm.ShowDialog();
}

ژیار رحیمی
دوشنبه 15 آبان 1396, 00:13 صبح
مشکل این بار به متغییر i برمیگردد، مشابه مشکل قبلی داخل حلقه تعریف شده است که من دیر متوجه آن شدم

List<DataGridViewRow> selectedRows = (from row in dataGridView1.Rows.Cast<DataGridViewRow>()
where Convert.ToBoolean(row.Cells["check"].Value) == true
select row).ToList();
Form1 frm = new ّForm1();
int i = 0;
foreach (DataGridViewRow row in selectedRows)
{
frm.dataGridViewX1.RowCount = selectedRows.Count;
frm.dataGridViewX1.Rows.Add(r);
frm.dataGridViewX1.Rows[i].Cells["name"].Value = row.Cells["name"].Value.ToString();
frm.dataGridViewX1.Rows[i].Cells["family"].Value = row.Cells["family"].Value.ToString();
frm.dataGridViewX1.Rows[i].Cells["father"].Value = row.Cells["father"].Value.ToString();
i++;
}
this.Hide();
frm.ShowDialog();

Iman7228
دوشنبه 15 آبان 1396, 14:10 عصر
بسیار سپاسگزارم از شما مهندس عزیز :لبخندساده: