PDA

View Full Version : سوال: از کنترل خارج شدن datagridview ، اطلاعاتی رو نمایش میده که مربوط به خودش نیست



bahman1366
چهارشنبه 21 فروردین 1392, 11:24 صبح
من دوتا datagridview در فرمم دارم که هرکدومو با اطلاعات یه جدم خاص پر میکنم ولی موقع اجرا اولا هردو یه اطلاعاتو نشون میده،دوما هر کاری روی یکی از datagridview انجام میدم روی اون یکی دیگه هم انجام میشه مثلا وقتی یکی از رکوردها رادر datagridview اول انتخاب میکنم همون رکورد در datagridview دوم نیز بطورخودکار انتخاب میشه.لطفا راهنماییم کنید،نمیدونم مشکل کجاست.
کدش رو هم اینطوری نوشتم:

DataTable dt = new DataTable();
dt = db.select("select *from Moshakhasat_tb ");
dataGridView1.DataSource = dt;
dataGridView2.DataSource = db.select("select Onvan from MoshakhasateTarh_tb ");

Mahmoud.Afrad
چهارشنبه 21 فروردین 1392, 22:16 عصر
دیتاسورسی که به دو دیتاگرید نسبت میدی یکی هستند(یک دیتاتیبل را به هر دو دادی)
کد کلاس db را هم بزار.

bahman1366
چهارشنبه 21 فروردین 1392, 22:27 عصر
دیتاسورسی که به دو دیتاگرید نسبت میدی یکی هستند(یک دیتاتیبل را به هر دو دادی)
کد کلاس db را هم بزار.
یکیشو با دیتاتیبل دادم یکی دیگه رو مستقیما از جدول میگیرم،هر کدومو با یه اطلاعات خاص پر میکنم نمیدونم چی شده اولین باره به همچین مشکلی بر میخورد
اینم کد کلاس :

public DataTable select(string str)
{
// dt.Clone();
// dt.Reset();
dt.Clear();
SqlDataAdapter da = new SqlDataAdapter(str,connectionstr());
da.Fill(dt);
con.Close();
return dt;
}

bahman1366
چهارشنبه 21 فروردین 1392, 22:41 عصر
اینم نتیجه اجراش که وقتی اولین دیتاگرید رو انتخاب میکنم همون رکورد در دیتا گرید دوم نیز بطورخودکار انتخاب میشه.

102619

Mahmoud.Afrad
پنج شنبه 22 فروردین 1392, 00:23 صبح
شما dt را در سطح کلاس تعریف کردید و هربار همونو return میکنید. پس در هر دو کد ، یک dt به دو گریدویو پاس داده شده.

برای حلش ، دیتاتیبل را از سطح کلاس db حذف کنید و داخل متد ایجادش کنید:

public DataTable select(string str)
{
DataTable dt = new DataTable();
SqlDataAdapter da = newSqlDataAdapter(str, connectionstr());
da.Fill(dt);
return dt;
}

bahman1366
دوشنبه 26 فروردین 1392, 00:11 صبح
دوست عزیز خوب پس چرا هر کاری روی یکی از دیتا گرید انجام میدم رو اون یکی هم انجام میشه؟ هر چند من هر دفعه از یه جدول خاص اطلاعات رو میگیرم ،در ضمن من که همزمان dt رو به دیتاگرید نمیدم که؟اول دیتاگرید اول رو پر میکنم بعد دیتا گرید دوم رو با یه query دیگه پرمی کینم که اصلا به همدیگه ربطی ندارند.

aliasghar2
دوشنبه 26 فروردین 1392, 00:19 صبح
کافی دو تا دیتاتیبل جدا گانه داشته باشی روش Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud.Afrad) کاملا درسته

صد در صد مشکلت حل میشه

Mahmoud.Afrad
دوشنبه 26 فروردین 1392, 00:58 صبح
دوست عزیز خوب پس چرا هر کاری روی یکی از دیتا گرید انجام میدم رو اون یکی هم انجام میشه؟ هر چند من هر دفعه از یه جدول خاص اطلاعات رو میگیرم ،در ضمن من که همزمان dt رو به دیتاگرید نمیدم که؟ اول دیتاگرید اول رو پر میکنم بعد دیتا گرید دوم رو با یه query دیگه پرمی کینم که اصلا به همدیگه ربطی ندارند.
ربط دارند. وقتی یک دیتاتیبل در سطح کلاس db دارید و در متدها این دیتاتیبل رو return میکنید، پس هر بار همون برگشت داده میشه. کلاسها از نوع ارجاعی هستند و DataTable هم یک کلاس هست پس ارجاع(آدرس، اشاره گر) اون بازگشت داده میشه. پس مادامی که dt را new نکنید دارید با همون دیتاتیبل قبلی کار میکنید.
برای تمایز بین نتایج در کد خودتون به جای dt.Clear بنویسید dt = new DataTable();.

bahman1366
سه شنبه 27 فروردین 1392, 17:34 عصر
ممنون مشکلم حل شد راحلی که گفتین دقیقا درست بود،اصلا فکر نمیکردم مشکل از Dt باشه.به هرحال بازم تشکر