PDA

View Full Version : سوال: نمایش حاصل جستجو دو جدول در یک دیتاگرید



omidghadiri
دوشنبه 03 آبان 1389, 08:52 صبح
باسلام واحترام خدمت تمامی مدیران محترم سایت و کاربران گرامی



بنده به تازگی به مشکلی برخوردم که این مشکل در زمان جستجو دو جدول و ریختن آن در یک دیتاگرید است .

شرح کار:
بنده جستجورو در داخل یک Dataset انجام دادم و نسبت به دو جدول عملیات جستجو رو انجام دادم.
حالا قصد دارم این نتایج رو در یک دیتاست بریزم ولی متاسفانه وقتی در فرم قصد دارم نتایج جستجو رو در دیتاگرید نشون بدم متأسفانه تنها محتویات یک جستجورو نشون میده.

کارهای انجام شده:



string

comand = "select Firm_ID,Job_title,Job_code,Date_of_issue,location, limit,Job_Group,Job_Base from Formal_Job where Firm_ID='" + set_firm_base + "'";


string comand2 = "select Other_Job,Date_of_Other_JOb from Informal_Job where Firm_ID='" + set_firm_base + "'"; Connection.EXecut(comand);
OleDbDataAdapter dap = newOleDbDataAdapter(comand, Connection.con);
OleDbDataAdapter dap2 = newOleDbDataAdapter(comand2, Connection.con);


DataSet ds_3 = newDataSet();


dap.Fill(ds_3, "Formal_Job");
dap2.Fill(ds_3, "Informal_Job");



return ds_3;

و در فرم این عملیات انجام شده:



private void button10_Click(object sender, EventArgs e)

DataSet ds = newDataSet();


ds = selectee1.ahkam1_2();


dataGridView5.DataSource = ds.Tables[0];

Reza_Yarahmadi
دوشنبه 03 آبان 1389, 09:19 صبح
شما توي دستور زير 2 جستجو رو توي 2 ديتا تيبل مجزا ميريزيد. زمان تنظيم ديتا گريد هم يكي رو معرفي بهش معرفي ميكنيد.


dap.Fill(ds_3, "Formal_Job");
dap2.Fill(ds_3, "Informal_Job");

براي اينكه بتونيد 2 جستجو رو با هم داشته باشيد اولا بايد نوع و تعداد فيلدهاي 2 جدول مثل هم باشه بعدشم با دستور Union دستورات رو با هم جمع كنيد و نمايش بديد.(كه براي كاري كه ميخوايد انجام بديد نميشه!!)
و يا اينكه در صورت امكان 2 جدول رو با هم Join كنيد
چيزي شبيه كد زير



comand = @"
select
f.Firm_ID,
Job_title,
Job_code,
Date_of_issue,
location,
limit,
Job_Group,
Job_Base,
Other_Job,
Date_of_Other_JOb
from
Formal_Job f INNER JOIN Informal_Job i
on
f.Firm_ID = i.Firm_ID
where
f.Firm_ID='" + set_firm_base + "'";

OleDbDataAdapter dap = newOleDbDataAdapter(comand, Connection.con);
DataSet ds_3 = newDataSet();
dap.Fill(ds_3, "Formal_Job");
return ds_3;

omidghadiri
سه شنبه 04 آبان 1389, 08:17 صبح
باسلام واحترام


دوست عزیز این دو جدول بنده که عملیات جستجو رو انجام دادم رو دو جدول با فیلدهای متفاوت هست نه یکسان اگر امکان داره راهی بفرمائید که نتایج جستجو رو در یک دیتاست بریزم ممنون میشم .

شایان ذکر هست که بنده این کار رو در SQL به راحتی انجام میدادم ، وتنها با اکسس هست که مشکلم این طوری شده ، لطفا کمکم کنید .

Reza_Yarahmadi
سه شنبه 04 آبان 1389, 08:23 صبح
مثالي كه بالا نوشتم براي 2 جدول متفاوت و ريختنش در يك ديتاست بود.
كوئري بالا رو تست كنيد (ممكنه با توجه به نياز شما لازم باشه يك مقدار تغيير كنه) اگر جوابي كه ميخوايد رو نمايش نميده لطف كنيد ساختار جدول ها‌ ، براي هر جدول چند ركورد آزمايشي و با توجه به ركورد هاي آزمايشي يك نمونه خروجي كه نياز داريد رو اينجا بذاريد تا بهتر بشه كمكتون كرد.

raika17metal
سه شنبه 04 آبان 1389, 09:52 صبح
چرا دوتا جدول رو UNION نمی کنی؟ با این کار مشکل نامساوی بودن فیلدها هم حل میشه چون میتونی به ازای فیلدی که توی جدول دیگه وجود نداره Null یا صفر بذاری.

omidghadiri
سه شنبه 04 آبان 1389, 10:59 صبح
چرا دوتا جدول رو UNION نمی کنی؟ با این کار مشکل نامساوی بودن فیلدها هم حل میشه چون میتونی به ازای فیلدی که توی جدول دیگه وجود نداره Null یا صفر بذاری.



باسلام


باسپاس از پاسخ شما

من میخواستم بدون اینکه این کاررو انجام داد از دیتاست استفاده کنم ، لطفا راهی به من معرفی کنید که این کارهای join و Union استفاده نکرد و همان ریختن دو سرچ به همان روش بالا که نمونه کدهایم رو گذاشتم رو بفرمائید ودرواقع ارور کار من رو بگید.

ممنون میشم کمکم کنید.

Reza_Yarahmadi
سه شنبه 04 آبان 1389, 11:12 صبح
من میخواستم بدون اینکه این کاررو انجام داد از دیتاست استفاده کنم ، لطفا راهی به من معرفی کنید که این کارهای join و Union استفاده نکرد و همان ریختن دو سرچ به همان روش بالا که نمونه کدهایم رو گذاشتم رو بفرمائید ودرواقع ارور کار من رو بگید.
دوست عزيز اگه شما قصد داريد از دستورات SQL فرار كنيد و به #C بچسبيد كه كار كاملا اشتباهي ميكنيد. خيلي از مواقع با يك Join ساده توي SQL كاري رو انجام ميديد كه اگه بخوايد همون كار رو توي #C انجام بديد كلي درد سر داريد. زمانهايي هم هست كه عملا نميتونيد از #‍‍C استفاده كنيد و فقط مجبوريد به SQL متوسل بشيد. پس بهتر اينه كه سعي كنيد با همون دستورات SQL كار كنيد.
اگه بازم اصرار بر كدنويسي جايي غير از بانك هستيد ، بايد ابتدا به يكي از DataTable ها فيلدهاي ديگري رو اضافه كنيد ، بعد دونه دونه ركوردهاي دومي رو به ركورد متناظرش در اولي اضافه كنيد.(اين كار اصلا منطقي نيست!:متفکر:)

White.Wit
سه شنبه 04 آبان 1389, 11:14 صبح
سلام من نميدونم اين روشي رو كه ميخوام بگم بدردت مي خوره يا نه.
اما من توي برنامه هام در جايي كه ديتاست رو با واسط كاربري (نه بصورت كد نويسي) تعريف مي كنم يك تيبل آداپتر تعريف مي كنم كه شامل كليه فيلدهايي از دو يا چند جدول مختلف كه بهشون نياز دارم قرار مي دم و شروط خواسته شده رو در اونجا وارد مي كنم تا دستور sql رو خودش بصورت خودكار وارد مي كنه( كه البته طبق فرمايش دوستمون از دستور join استفاده مي كنه). سپس در هر جا از برنامه كه خواستم اون دستور سرچ رو انجام بدم فقط تيبل آداپتر مربوطه رو با نام كوئري اي كه ساخته بودم فراخواني كرده و در ديتاگريد به نمايش ميذارم.
اگه به دردت ميخوره يا سوال بيشتري داشتي در خدمتم.

Reza_Yarahmadi
سه شنبه 04 آبان 1389, 11:28 صبح
اما من توي برنامه هام در جايي كه ديتاست رو با واسط كاربري (نه بصورت كد نويسي) تعريف مي كنم يك تيبل آداپتر تعريف مي كنم كه شامل كليه فيلدهايي از دو يا چند جدول مختلف كه بهشون نياز دارم قرار مي دم و شروط خواسته شده رو در اونجا وارد مي كنم تا دستور sql رو خودش بصورت خودكار وارد مي كنه( كه البته طبق فرمايش دوستمون از دستور join استفاده مي كنه). سپس در هر جا از برنامه كه خواستم اون دستور سرچ رو انجام بدم فقط تيبل آداپتر مربوطه رو با نام كوئري اي كه ساخته بودم فراخواني كرده و در ديتاگريد به نمايش ميذارم.
كاري كه شما انجام ميديد درست كردن يك View است. View به نوعي يك دستور SQL است كه براي راحتي كار مورد استفاده قرار ميگيره و مواقعي كه يك جستجو خاص با شرايط مختلف مورد نياز است جستجو رو بصورت يك View درست ميكنند و شروط رو روي View اعمال ميكنند.
براي اين كار هم بايد از دستورات SQL استفاده كنيد! :چشمک: