PDA

View Full Version : سوال: استفاده از WHERE در DataGridView



NasimBamdad
سه شنبه 14 تیر 1390, 10:55 صبح
سلام

من یک برنامه به زبان C# نوشتم و از SQL برای دیتابیس استفاده می کنم

یک کوری هم برای کارم نوشتم و به صورت View در آوردم و به DataGridView وصل کردم ، حال ستون های مورد نیازم در DataGridView نمایش داده شده است ، مشکل از این قرار هست که من می خواهم از جدولم یک WHERE بگیرم ،

الان تمامی محتویات در داخل جدول در DataGridView _( بر اساس VIew که نوشتم ) نمایش داده می شود ،

که شامل ستون های زیر است


fname
lname
patientid
daroo_name
number

سوال من این هست که چه طوری میشه patientid رو از یک TEXTBOX در فرم بگیره ، و بعد مقدار TextBox رو به عنوان WHERE استفاده کنه ، یعنی این


SELECT * FROM daroo_usage WHERE patientid ='69'

در اینجا 69 به عنوان شماره بیمار هست . چه طوری میشه این مقدار رو کاربر از طریق TEXTBOX وارد کنه و نتیجه کوری بالا در DataGridView نمایش پیدا کند

با تشکر فراوان

nilmil_nil
چهارشنبه 15 تیر 1390, 09:48 صبح
"SELECT * FROM daroo_usage WHERE patientid ='"+ Textbox.text+"'";

NasimBamdad
چهارشنبه 15 تیر 1390, 19:10 عصر
"SELECT * FROM daroo_usage WHERE patientid ='"+ Textbox.text+"'";





ممنون دوست عزیز ،

این کد رو کجا باید بزنم ؟ در DataGridView یا در کوری باید بزنم ؟ و اون کوری رو به صورت View در بیارم و در DataGridView لود کنم ؟؟

yasspring
پنج شنبه 16 تیر 1390, 21:00 عصر
با سلام
می تونید یک sub query توی برنامه بسازید که یک پارامتر بگیره و سپس از محتویات text box به عنوان پارامتر استفاده کنید مانند دستور زیر:
this.querytableadapter.fillby(this.querydataset.qu ery,textbox1.text);

mmd2009
پنج شنبه 16 تیر 1390, 21:07 عصر
سلام

ببینید دوست عزیز شما اطلاعاتتون رو بذارید تو یک Dataview سپس Dataview رو فیلتر کنید و بذارید تو گرید ویو

موفق باشید

NasimBamdad
یک شنبه 19 تیر 1390, 00:49 صبح
سلام ،

ببینید ، روی فورم خودم یک TextBox و یک DataGridView و یک Button دارم

کوری من این هست


SELECT * From Daroo_Usage Where patientid = '0069'

یک عامل دارم که WHERE هست ، می خواهم این مقدار رو از کاربر در TextBOX بگیرم و با زدن Button نتایج در DataGrid View نشان داده شود

من مبتدی هستم و نمی دانم چه کدی رو بزنم ، لطفا بفرمایید که بعد از ارتباط با DataBase چه کد هایی رو بنویسم


SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=DBS;integrated security=true");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cnn.Open();


این کد ارتباط با SQL هست ( همان طور که می دانید ) بعد از این چه باید بنویسم

ممنون میشم

NasimBamdad
دوشنبه 20 تیر 1390, 09:37 صبح
سلام

ببینید دوست عزیز شما اطلاعاتتون رو بذارید تو یک Dataview سپس Dataview رو فیلتر کنید و بذارید تو گرید ویو

موفق باشید

چه طوری فیلتر کنم ? من دیتا وییو دارم , اگه منظور همانی است که که در اس كیو ال میسازند؛
Select * from daroo_usage where patientid = '0050'

این رو در سی شارپ به عنوان دیتا سورس در دیتا گیرید وییو قرار دادم اما من می خواهم اوون شرطwhere رو از تکست باکس توسط کاربر بگیرم

NasimBamdad
سه شنبه 28 تیر 1390, 16:56 عصر
عزيزان ،‌ كسي نظري نداره ؟‌ يعني راهي نيست كه اون شرط رو از كاربر توسط TestBox بگيرم ؟؟؟

بگم مشخصات كل جدول رو چاپ كنه ،‌اما فقط اون هايي كه مثلا ID برابر با TextBox دارند !‌

Select * From Daroo_usage Where ID = ' 36985'

نميشه كسي كمك كنه !؟

ma.rad
سه شنبه 28 تیر 1390, 17:06 عصر
سلام دوست عزیز


"SELECT * FROM daroo_usage WHERE patientid ='"+ Textbox.text+"'";

روی تکس باکس دبل کلیک کنید دستور جستجویی که دوستمون گفتن رو بنویسید که در حین تایپ مورد رو پیدا کنه ،فیلتر دیتاگرید برای اینجا لازم نیست

myazdani
سه شنبه 28 تیر 1390, 17:19 عصر
دوست عزيزم
فكر كنم راه حل اينه كه بايد يه stored procedure پارامتر دار تعريف كني و بعد از مقدار دهي به پارامترش تو برنامه اونو رو جدولت اجرا كني

مويد باشي

اگه به توضيح بيشتر نياز داري بگو تا بگم

NasimBamdad
چهارشنبه 29 تیر 1390, 17:30 عصر
سلام دوست عزیز

روی تکس باکس دبل کلیک کنید دستور جستجویی که دوستمون گفتن رو بنویسید که در حین تایپ مورد رو پیدا کنه ،فیلتر دیتاگرید برای اینجا لازم نیست

مرسی عزیزم ، میرم تست کنم ببینم چه طور میشه !

NasimBamdad
چهارشنبه 29 تیر 1390, 17:30 عصر
دوست عزيزم
فكر كنم راه حل اينه كه بايد يه stored procedure پارامتر دار تعريف كني و بعد از مقدار دهي به پارامترش تو برنامه اونو رو جدولت اجرا كني

مويد باشي

اگه به توضيح بيشتر نياز داري بگو تا بگم


مبحث سنگین شد و تخصصی ، ممنون میشم اگه ساده توضیح بدید ! Mer C

NasimBamdad
یک شنبه 02 مرداد 1390, 16:50 عصر
ببینید الان کد من به این صورت هست ،




SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "SELECT dbo.daroo_usage.patientid, dbo.daroo_usage.no, dbo.daroo_type.daroo_name,
dbo.patients.fname, dbo.patients.lname FROM dbo.daroo_usage
INNER JOIN dbo.daroo_type ON dbo.daroo_usage.darooid = dbo.daroo_type.id
CROSS JOIN dbo.patients
WHERE patientid ='" + textBox1.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);

dataGridView1.DataBindings.Add("datasource", ds, "patientid");
dataGridView1.DataMember = "patients";
cnn.Close();



زمانی که شماره پرونده که همون قید و شرط من هست ( WHERE ) و Button رو می زنم که نتایج را در DataGridView نمایش دهد این خطا رو میده :



Cannot bind to the property or column patientid on the DataSource.
Parameter name: dataMember


یک View هم با SQL Managment ساختم که به صورت زیر هست و اون رو به روش زیر در DataGridView لود کردم ،


SELECT dbo.daroo_usage.patientid, dbo.daroo_usage.no, dbo.daroo_type.daroo_name, dbo.patients.fname, dbo.patients.lname
FROM dbo.daroo_usage INNER JOIN
dbo.daroo_type ON dbo.daroo_usage.darooid = dbo.daroo_type.id CROSS JOIN
dbo.patients

http://036.1.img98.net/out.php/i495444_1.JPG


خودم فکر می کنم که در کد اصلیم در 3 یا 4 خط آخرم ( DataGridVoew ) مشکلی هست یا چیزی کم هست !

myazdani
دوشنبه 03 مرداد 1390, 22:09 عصر
دوست عزيز من خواستم strored procedure رو برات بنويسم ولي خطا ميده. ايراد syntsx داره. من فكر ميكنم ايراد از نحوه ارسال پارامتر نباشه . اگه دستورت درست باشه مي توني با همين روشايي كه عزيزان در تاپيكهاي قبلي گفتن پارامترت رو مقدار دهي كني. استفاده از sp مزاياي زيادي داره و من كدش رو برات قرار ميدم و شما كافيه ولي فعلا مشكلي رو ازت حل نميكنه. مشكل شما اگه من درست متوجه شده باشم تو دستور select هست. بهتره بگي چه جدولهايي داري و چي ميخواي استخراج كني. شايد با كمك دوستان بتونيم راه بهتري براش پيدا كنيم.

NasimBamdad
سه شنبه 04 مرداد 1390, 16:45 عصر
دوست عزيز من خواستم strored procedure رو برات بنويسم ولي خطا ميده. ايراد syntsx داره. من فكر ميكنم ايراد از نحوه ارسال پارامتر نباشه . اگه دستورت درست باشه مي توني با همين روشايي كه عزيزان در تاپيكهاي قبلي گفتن پارامترت رو مقدار دهي كني. استفاده از sp مزاياي زيادي داره و من كدش رو برات قرار ميدم و شما كافيه ولي فعلا مشكلي رو ازت حل نميكنه. مشكل شما اگه من درست متوجه شده باشم تو دستور select هست. بهتره بگي چه جدولهايي داري و چي ميخواي استخراج كني. شايد با كمك دوستان بتونيم راه بهتري براش پيدا كنيم.

مرسی دوست عزیز ، دیروز کمی با SQL کار کردم و متوجه شدم که بله مشکل در دستورات SELECT هست ، یعنی شک کردم ، دقیقا نمی دانم


ببین دوست عزیز ، من حدود 10 تا 15 تا جدول دارم ، اما برای این مشکلم 3 تا شو بیشتر نیاز ندارم

اولی :

Patients = جدول بیماران هست که مشخصات فردی بیماران در این جدول قرار می گیرد ، مثل شماره پرونده ، نام و نام خانوادگی و ..............
daroo_type = در این جدول انواع و اقسام مختلف دارو هایی که استفاده می شود قرار می گیرد
daroo_usage = در این جدول دارو هایی که برای تمامی بیماران مورد استفاده خواهد گرفت درج می شود که باید بعد با Queri اون ها رو از هم دیگه جدا کرد که مشخص شود هر بیمار چه دارویی استفاده کرده است .


فایل SQL هر جدول رو هم جدا جدا قرار دادم

حالا می خواهم یک سری از ستون ها رو در DataGridView نمایش بدم و با WHERE فیلتر کنم داده های جدول daroo_usage رو .

شماره پرونده (معادل ID در جدول patients )
نام ( معادل fname در جدول patients )
نام خانوادگی ( معدل lname در جدول patients )

نام دارو ( های ) مصرف شده
تعداد دارو های مصرف شده

جدول daroo_type :

این جدول شامل 3 ستون هست

id
daroo_name
daroo_cost

جدول daroo_usage :

این جدول شامل 4 ستون هست

id
patientid
darooid
no


========================================
ستون patientid در جدول daroo_usage برابر هست با ستون id در جدول patients که حاوی شماره پرونده هر بیمار هست که یک ستون منحصر به فرد می باشد در کل دیتابیس

ستون darooid در جدول daroo_usage برابر هست با ستون id در جدول daroo_type

من با ترکیب جداول daroo_usage و daroo_type سعی در این داشتم که به جای شماره هر دارو ، اسم آن را نشان بدم

یعنی به جای اینکه در خروجی در ستون نام دارو ، آی دی آن را داشته باشیم ، اسم معادل آی دی را داشته باشم

72947
dbs.zip (http://www.4shared.com/file/pjzCM4p_/dbs.html)


یک همچین چیزی رو انتظار دارم داشته باشم

http://036.01.img98.net/out.php/i500672_dgw.GIF

myazdani
سه شنبه 04 مرداد 1390, 17:00 عصر
دوست عزيز
قبل از انجام هر كاري و هر تغييري نام فيلد no رو تغيير بده به يه چيز ديگه و امتحان كن ببين اجرا ميشه يا نه. چون no كلمه ذخيره شده هست و برا اس كيو ال توليد اشكال ميكنه. يه چيزي مثل كلمه select مي مونه.

reza2012
سه شنبه 04 مرداد 1390, 17:53 عصر
String Se;

Se= "SELECT * FROM daroo_usage WHERE patientid ='"+ Textbox.text+"'";







حالا همن رو تو sql Command قرار بده اينطوري


SqlCommand = New SqlCommand(Se,ConnectionString);

NasimBamdad
پنج شنبه 06 مرداد 1390, 14:33 عصر
مشکل رو حل کردم ، کوری رو یک تغییر دادم و کد ها به صورت زیر شد




SqlConnection cnn = new SqlConnection(@"Data Source=.\SQLEXPRESS;initial catalog=NoorAutomation;integrated security=true");
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
cnn.Open();
cmd.CommandText = "SELECT dbo.daroo_usage.patientid, dbo.daroo_usage.numberz, dbo.daroo_type.daroo_name, dbo.patients.fname, dbo.patients.lname FROM dbo.daroo_usage INNER JOIN dbo.daroo_type ON dbo.daroo_usage.darooid = dbo.daroo_type.id INNER JOIN dbo.patients ON dbo.daroo_usage.patientid = dbo.patients.id WHERE patientid ='" + textBox1.Text + "'";
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
cnn.Close();


باید DataGridView رو برابر با DataSET کرد

کد یکی مانده به آخر

از همه دوستان عزیزم که من رو کمک کردند ممنون هستم ،


امیدوارم در سوالات دیگری که دارم در تاپیک های دیگه همچنان کمکم کنند

مرسی