PDA

View Full Version : datagride



samira222
شنبه 27 بهمن 1386, 19:44 عصر
من توی برنامه از طریق textboxو نتیجه جستجو توی datagride نشون داده می شه
حالا من می خوام با انتخاب یک سطر datagride مقدار یک ستون اون که مثلا key هست برگرده و بره توی فرم بعد .
و یکی هم اینکه من چطوری می تونم شماره اخرین سطر database ام رو پیدا کنم و به یک ستونش مثلا یک شماره اضافه کنم
خیلی ببخشید ولی خیلی فوریه - خیلی متشکرم - منتظر جوابتون هستم

ghafoori
شنبه 27 بهمن 1386, 20:48 عصر
دوست عزیز برای سوال اول با کد زیر می توانید محتویات سطر فعلی انتخاب شده را بخوانید


me.DataGridView1.Rows(me.DataGridView1.CurrentRow. Index).Cells(number column).value

برای سوال دوم با تابع count به این صورت دزر sql


select count(column name) where

یا استفاده از تابع compute در دیتاتیبل مثل کد زیر


datatable1.compute("count(columnname)","")

samira222
شنبه 27 بهمن 1386, 22:42 عصر
خیلی خیلی ممنونم . سوال اولم به لطف شما حل شد ولی نتونستم برای دومی به نتیجه برسم .
می شه بیشتر توضیح بدین !!؟ من می خوام با یک دستور هم شماره سطر اخر رو پیدا کنم هم به یکی از فیلدهاش یک مقداری اضافه کنم !!؟
یا اگه با دو تا دستور باید باشه چطوری میشه ؟ متشکر می شم اگه کامل توضیح بدین

hesam_hma
شنبه 27 بهمن 1386, 23:55 عصر
دستور زیر به اولین ستون آخرین سطر دیتا گرید و یو مقدار 100 رو اضافه میکنه


datagridview1.Rows.Item(datagridview1.Rows.Count - 1).Cells.Item(0).Value += 100

ghafoori
یک شنبه 28 بهمن 1386, 09:15 صبح
دوست عزیز برای من فکر کردم شما تعداد سطر را می خواهید که ان کد تعداد سطر را به شما می دهد برای این کار که شما می خواهید اول یک نکته اگر شما می خواهید ستونی داشته باسید که یکی یکی اضافه شود sql از این کار پشتیبانی می کند کافی است خاصیت auto incriment ستونتون را برابر true کنید اگر این نیست من یک همچین کد sql را پیشنهاد می دم


update table_name set id=max(id)+1 where id=max(id)

فکر نکنم کار جالبی باشه اما بهتر است شما بگید دقیقا چه کار می خواهید انجام دهید شاید راه بهتری باشد یا اگر می توانید با روشهایی که اقای hesam_hma پیشنهاد دادن یک طور قضیه را حل کنید

samira222
یک شنبه 28 بهمن 1386, 11:00 صبح
من همینطوری که شما می گین می خوام .یعنی یک ستونی که خودش با هر بار load شدن فرم یکی اضافه کنه و توی textbox به صورت پیش فرض منظورم با هر بار load شدن فرم نشون داده بشه و توی بانک هم در نظر گرفته بشه . من autoincrement رو true کردم ولی نمی دونم چطوری می شه این کار رو بکنم . امیدوارم منظورم رو واضح گفته باشم .
خیلی خیلی متشکرم . منتظر جوابتون هستم

ghafoori
یک شنبه 28 بهمن 1386, 11:59 صبح
خوب وقتی که autoincrement را true کنید و مقدار autoincrement seed را هم مقدار بدید مثلا 1 وقتی یک رکورد جدید ایجاد می کنید خودش بصورت خودکار ان فیلد را مقدار می دهد دیگر شما لازم نیست این کاررا انحام دهید اصلا با ان فیلد کاری نداشته باشید

samira222
یک شنبه 28 بهمن 1386, 18:35 عصر
من همه کارهایی رو که شما گفتین انجام دادم . ولی باز خطا می گیره که باید این فیلد رو مقدار بدین . اخه همین فیلد کلید ه و منم توی دستور insert into اون قسمتی که این فیلد رو مقدار میداد برداشتم ولی حالا که اجرا می کنم خطا میده . چی کا رکنم !!؟؟
چند روزه من درگیر همین مشکلم :عصبانی++::گریه:. میشه زودتر منو راهنمایی کنین . ببخشید چون واقعا وقت ندارم . با کلی بدبختی از استادم مهلت خواستم . ممنون می شم

ghafoori
دوشنبه 29 بهمن 1386, 06:53 صبح
کد insert into خود را بنویسید

samira222
دوشنبه 29 بهمن 1386, 10:21 صبح
کد اینه . که Key1 که در واقع کلیده و می خوام خودش یکی یکی اضافه بشه و قبلا در Textbox1 بوده
Dim cmd AsNew SqlCommand("INSERT INTO Moshakhasatefarde ( " & "name1," & "family," & "configuration_num," & "orientation," & "last_madrak," & "type_stekhdam," & "date_stekhdam," & "organezation_post" & " ) values ('" & TextBox2.Text & "',' " & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox8.Text & "','" & TextBox9.Text & "')", con)
منتظر خبرتون هستم

ghafoori
دوشنبه 29 بهمن 1386, 16:42 عصر
ابتدا باید فیلد خودتان را داخل sql server خاصیت identity ان را true کنید بعد داخل عبارت insert خود فیلدی identity قرار دادید را دکر نکنید مثلا من داخل جدولم فیلد id فیلدی است که یکی یکی زیاد می شود و با این کد insert را انجام میدهم


insert into kala ([name],vahed,costsale,meghdar) values ('rob','ghoti',1200,10);

samira222
دوشنبه 29 بهمن 1386, 18:00 عصر
وای ببخشید من خیلی اذیتتون کردم
راستش من چند تا جدول دارم . یکی از این جدولها با بقیه رابطه یک به چند داره . اونی که طرف یک هست درست شد یعنی خودش یکی یکی اضافه می کنه اما اونهایی که طرف چند هستند دو تا فیلد کلید دارند که قراره یکی یکی اضافه بشه . یکی از این فیلدها پل بین این جدول با اون جدول طرف یک هست . همین فیلد موقع اجرا خطا میده که نمی تونه null باشه .
من هر دفعه identity این فیلد رو null می کنم اما خودش false می شه . حالا باید چی کار کنم !!؟؟؟ :متعجب:
من منتظر جوابتون هستم .

ghafoori
دوشنبه 29 بهمن 1386, 19:50 عصر
وای ببخشید من خیلی اذیتتون کردم
راستش من چند تا جدول دارم . یکی از این جدولها با بقیه رابطه یک به چند داره . اونی که طرف یک هست درست شد یعنی خودش یکی یکی اضافه می کنه اما اونهایی که طرف چند هستند دو تا فیلد کلید دارند که قراره یکی یکی اضافه بشه . یکی از این فیلدها پل بین این جدول با اون جدول طرف یک هست . همین فیلد موقع اجرا خطا میده که نمی تونه null باشه .
من هر دفعه identity این فیلد رو null می کنم اما خودش false می شه . حالا باید چی کار کنم !!؟؟؟ :متعجب:
من منتظر جوابتون هستم .

من منظور شما را خوب درک نکردم جدول دیگر شما دو کلید دارد یک کلید اصلی خود جدول و یک کلید خارجی برای ارتباط این جدول با جدول دیگر ایا هر دو کلید باید identity باشد خوب اینجا سوال برای من پیشمیاد این است که چه لوزمی به این کار است بیشتر توضیح دهید و سوال خودتان را هم می توانید در تالار sql server هم مطرح کنید که تخصصی تر بهتون جواب بدن

samira222
سه شنبه 30 بهمن 1386, 11:06 صبح
فرض کنید من دو تا جدول دارم که با هم رابطه یک به چند دارند .
جدول اول به غیر از فیلدهای دیگه یک فیلد به نام Key داره که کلید اصلی هست .
جدول دوم دارای دو فیلد به نام key و column هست که هر دو کلید هستند .
مثلا فردی به نام x در جدول دارای سه رکورد در جدول دوم می باشد . در نتیجه در جدول اول مقدار key=1 و در جدول دوم مقدار key=1 و column=1,2,3 است .
حالا می خوام فرد جدیدی اضافه کنم . که طبیعتا یک سطر در جدول اول و احتمالا دو سطر در جدول دوم داره . حالا باید مقدار پیش فرض key=2 شود و در جدول دوم هم مقدار ستون column به طور پیش فرض از 1 شروع شود و با هر بار اضافه کردن یکی اضافه شود .
خدا کنه این دفعه تونسته باشم منظورم رو بگم .
منتظر جوابتون هستم . تو رو خدا کمکم کنین . هیچی وقت ندارم

ghafoori
سه شنبه 30 بهمن 1386, 15:57 عصر
من داخل کامپیوتر خودم دو جدول ایجاد کردم هر دو دارای دو ستون اولی دارای یک کلید با خاصیت identity و جدول دیگر دارای دو ستون یکی کلید اصلی و identity و دیگری کلید خارجی هر دو راحت به انها سطر اضافه می شه من هنوز مشکل شما را درک نکردم
داخل کوئری که شما گذاشتید چیزی معلوم نیست در پست قبلیتان هم فقط ساختار جدول را شهر دادید نگفتید دقیقا چه خواسته ای را دارید که انجام نمی شه

samira222
سه شنبه 30 بهمن 1386, 17:48 عصر
خوب سعی می کنم بهتر توضیح بدم . من الان که می خوام یک سطر به کسی که شماره key اون 2 هست اضافه کنم (در حالی که تعداد سطرهای این فرد 2 تا است و تعداد کل سطرها 5 تا ) شماره سطر رو به جای 3 میزاره 6
یعنی به جای اینکه شماره ستون به key خاصی نسبت داده بشه بر اساس تمام سطرها اعمال می شه . ok?
همینطور که شما گفتین توی تالار sqlهم مطرح کردم ولی به جواب نرسیدم . فکر کنم اخرش این گره به دست خودتون باید یاز بشه .
خیلی متشکرم

ghafoori
سه شنبه 30 بهمن 1386, 18:45 عصر
باز هم واضح نیست شما می خواهید در جدول 2 دو سطر اضافه کنید و قبلا هم 3 تا سطر داشتید پس برای دو سطر جدید شماره column انها باید 4و 5 باشد و ستون key انها 2 تا اینجا درست گفتم باز برای من جای سوال است

در صمن اگر می توانید فایل ها دیتابیس خود را در اینجا قرار دهید همراه با کوئری که خطا می دهد برای این کار از بانک خود بک اپ بگیرید یا بانک را deattach کنید و از فایل های ان کپی بگیرید و سپس فایلهای را زیب کنید و داخل سایت قرار دهید کوئری که خطا می دهد را هم بنویسید بلکه بشود یک کاری کرد

در ضمن می توانید id من داخل yahoo را داخل مسنجر خود add کنید لازم شد انجا انلاین توضیح دهید

nasseritemp
سه شنبه 30 بهمن 1386, 19:57 عصر
شما میتونید با گروهبندی در Query ماکزیمم مقدار فیلد مورد نظرتون رو پیدا کنید و بعد ماکزیمم + 1 رو insert کنید. در ضمن باید اون فیلد رو از حالت auto بودن دربیارید.

samira222
چهارشنبه 01 اسفند 1386, 08:34 صبح
اگه می شه ایمیلتون رو بدین تا من بتونم راحت تر برنامه و احتمالا شکل با توضیح رو براتون بفرستم . اینطوری خیلی ممنون می شم

ghafoori
چهارشنبه 01 اسفند 1386, 15:58 عصر
منظور شما را گرفتم خود من راهی اتوماتیک برای ان سراغ ندارم مگر خودتان دستی این کار را انجام دهید اما یک سوال این فیلد به چه کاری می اید شما چرا می خواهید این ستون به این صورت دربیاید فلسفه این کار چیست در مورد تاریخ هم مشکا در برنامه است یا در بانک یا در هردو


پ ن : این متن توضیخات برای کاربرانی که این گفتگو را دنبال می کنند

فرض می کنیم من دو تا جدول دارم . یکی جدول مشخصات فردی و یکی هم جدول سوابق تحصیلی . مثل زیر :
جدول مشخصات فردی
key name Family شماره شناسنامه محل صدور
1 علی علوی 54353 مشهد
2 حسن حسنی 345345 تهران
3 حسین حسینی 876896 شیراز

سوابق تحصیلی
key Column رشته تحصیلی مدرک
1 1 کامپیوتر کارشناس
1 2 فیزیک ارشد
1 3 حسابداری کارشناس
2 1 شیمی کارشناس
2 2 کاردان گرافیک
3 1 کامپیوتر فوق دیپلم
3 2 حسابداری کارشناس
3 3 گرافیک کارشناس

حالا من می خوام شماره ستونها مثل بالا باشه . در حالی که اینطور نیست . مثلا بالا برای شماره کلید یک سه تا سطر داره . حالا اگه من بخوام یک سطر جدید ایجاد کنم شمارش می شه 9 . یعنی بر اساس کل سطرهای جدول شماره می زاره نه بر اساس اون کلید خاص .
یعنی اینطوری می شه :
key Column رشته تحصیلی مدرک
1 1 کامپیوتر کارشناس
1 2 فیزیک ارشد
1 3 حسابداری کارشناس
2 4 شیمی کارشناس
2 5
3 6 کامپیوتر فوق دیپلم
3 7 حسابداری کارشناس
3 8 گرافیک کارشناس

من برای تاریخ هم مشکل دارم . یعنی چند تا ماژول هم گرفتم ولی نمی تونم باهاشون کار کنم .

samira222
چهارشنبه 01 اسفند 1386, 17:43 عصر
خوب این ستون برای این هست که من بدونم مثلا اقای علوی چند تا کار در جدول شماره 2 داره . یک جورایی برای زیبایی و ترتیب و نظم توی جدولم . در ضمن این فیلد توی این جدول کلید اصلی هست . اتفاقا من می خواستم این فیلد رو امتحانی پاک کنم ولی نشد نمی دونم شاید هر جدول باید یک کلید اصلی داشته باشه . درسته !!؟؟؟

ghafoori
چهارشنبه 01 اسفند 1386, 18:53 عصر
خوب عصبانی نشید برای

خوب این ستون برای این هست که من بدونم مثلا اقای علوی چند تا کار در جدول شماره 2 داره

خوب چرا این کار را به این صورت انجام نمی دید برای اینکه بدونید اقای علوی چندتا کار دارد


select count(column) from savabegh where key=1

در کد بالا نیاز نیست column به ان صورتی که شما می خواهید باشد فقط کافی است همینطور یک فیلد عددی باشد تا زیاد شود لازم هم نیست پاکش کنید من فکر می کردم ستون خیلی مهمی است اگر این کار نشود تمام برنامتون لنگ می شود اما دیدم شما فقط برای نظم این را می خواهید که داده ها نظم داشته باشند

اگر اصرار به راه خل خودتان دارید این راه حل من است مثلا برای یک رکورد جدید برای علوی ابتدا با این کوئری اخرین عدد column را برای این فرد بدست اورید


select column from savabegh where key=1

بعد به عدد بدست امده یکی اضافه کنید و ان را در سطر جدید قرار دهید در این روش نمی توانید column را فیلد کلید قرار دهید چون تکرار دارد باید یک فیلد معمولی باشد

samira222
پنج شنبه 02 اسفند 1386, 19:25 عصر
من برای اینکه بالاترین شماره ستون رو بیارم توی textbox این کد رو توی formload نوشتم ولی مقدار -1 رو میده . می شه بگین به خاطر چیه !!!!؟؟؟
Dim cmd As New SqlCommand("select max(key1)+1 from Moshakhasatefarde", con)
con.Open()
ss = cmd.ExecuteNonQuery()
TextBox1.Text = CType(ss, Integer)
con.close
البته من دستور sql اش رو توی query analyzer نوشتم و درست بود ولی اینجا مقدار -1 میده
متشکرم

ghafoori
پنج شنبه 02 اسفند 1386, 20:24 عصر
شما باید از executescaler استفاده کنید نه از executenonquerey

samira222
شنبه 04 اسفند 1386, 09:30 صبح
برای سوال قبلی خیلی متشکرم درست شد فقط می خواستم بدونم فرقش با اون یکی چیه؟
سوال: 1- من یک فرم دارم که اطلاعات با labelنشون داده شدن و یک دکمه حذف. حالا می خوام وقتی دکمه حذف رو زدم همون لحظه اطلاعات نشون داده نشه یعنی به رکورد بعد از همون جدول بره . کد زیر رو هم نوشتم . می خواستم با bindingcintext این کار رو بکنم نشد با update هم خطا میده . باید چیکار کنم ؟
Dim cmd As New SqlCommand
Dim sqldel As String
sqldel = "delete from Moshakhasatefarde where key1=" + Label1.Text
cmd.CommandText = sqldel
cmd.Connection = con
con.Open()
cmd.ExecuteNonQuery()
con.Close()
MsgBox("حذف شد")
2-اگه بخوام موقعی که فرم load میشه صفحه کلید به صورت پیش فرض فارسی باشه باید چیکار کنم ؟
3- برای اینکه یک دکمه به صورت پیش فرض enter رو بگیره یعنی با زدن enter دکمه انتخاب بشه اون موقع باید چیکار کنم ؟

واقعا شرمنده ام:اشتباه: . اگه کمکم کنین واقعا متشکر میشم . :تشویق:

samira222
یک شنبه 05 اسفند 1386, 10:14 صبح
هیچ کس نیست به من کمک کنه !!!!!!!!!؟؟؟؟؟؟؟؟؟؟ :ناراحت:
تو رو خدا هر کی می دونه کمک کنه . این اقای غفوری هم ظاهرا خسته شدن !!
اقای غفوری قول میدم دیگه مزاحم نشم فقط جواب همین اخریها رو بدین دیگه تموم
بچه ها من اصلا وقت ندارم . تو رو خدا درک کنین :گریه:

ghafoori
یک شنبه 05 اسفند 1386, 15:59 عصر
سوال اول در exutenonqury برای این است که کوئری انجام شود اما هیچ خروچی ندارد برای exute scaler کوئری اجرا می شود و یک عدد بر می گرداند برای exutereader هم کوئری اجرا می کند و یک دیتاریدر برای خواندن تعداد زیادی اطلاعات به کار می رود
2-


Dim myCulture As New Globalization.CultureInfo("fa-IR")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(myCulture)

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

در ضمن سوالات جدیدتان را در تاپیک جدیدی مطرح کنید تا اگر کسی بلد است جواب بدهد هم قوانین سایت را رعایت کرده باشید من دیروز اصلا حالم خوش نبود برای همین جوابها دیر شد

nasseritemp
یک شنبه 05 اسفند 1386, 16:28 عصر
3- برای اینکه یک دکمه به صورت پیش فرض enter رو بگیره یعنی با زدن enter دکمه انتخاب بشه اون موقع باید چیکار کنم ؟


دو راه حل دارید :
1 - موقع Load کردن Form متد Focus مربوط به کنترل مورد نظرتون رو فراخوانی کنید.
2 - از منوی View گزینه Tab Orderرو انتخاب کرده و به کنترل مورد نظرتون اولین اولویت رو بدید.

Dariuosh
دوشنبه 06 اسفند 1386, 08:55 صبح
3- برای اینکه یک دکمه به صورت پیش فرض enter رو بگیره یعنی با زدن enter دکمه انتخاب بشه اون موقع باید چیکار کنم ؟

تو Property های فرم یه Accept Button هست اگه اشتباه نکنم