PDA

View Full Version : سوال: کار با DataGridView



bastakboys
چهارشنبه 12 فروردین 1388, 13:12 عصر
دوستان من چند مشکل با دیتا گرید دارم
1.من با کد زیر یک سطر در دیتاگرید درست میکنم



DataGridView1.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text, ComboBox1.Text)


خوب حالا می خواهم اگه سطری در دیتا گرید که قبلا وجود داشت که مقدار TextBox1.Text و ستون اول برابر بود بجایی اینکه سطری اضافه شود سطر ی که TextBox1.Text و ستون اول آن با هم برابر است آپدیت شود و فقط مقدار ستون چهارم و ComboBox1.Text با هم جمع شود.(من نمیتونم با کد یک سطر در دیتا گرید را ویرایش یا آپدیت کنم)؟

2. من بوسیله کد و OleDbCommand هر وقت سطری به برنامه اضافه میشود ان را به دیتا بیس اضافه میکنم. حالا اگه بخواهم چند سطر یا محتوای یک دیتا گرید را به دیتابیس اضافه کنم باید چه کاری انجام بدهم؟

mina.net
چهارشنبه 12 فروردین 1388, 18:11 عصر
سلام
شما برای وارد کردن کل یک دیتا گرید باید از حلقه استفاده کنید و هر سطر را به صورت جداگانه ثبت کنید. و برای اینکه قابل تشخیص باشه که این تعداد سطر ها به همدیگه ربط داره باید از یک فیلد کلیدی استفاده کنی مثلا اگر دیتا گرید یک فاکتور باشه شماره فاکتور رو به عنوان فیلد تکراری در نظر می گیری و تمام سطر ها و هر وقت خواستی این غکتور رو ببینی شماره فاکتور رو به عنوان فیلتر در نظر می گیری.
در مورد سوال اولت متوجه منظورت نشدم.

bastakboys
چهارشنبه 12 فروردین 1388, 19:08 عصر
سلام
شما برای وارد کردن کل یک دیتا گرید باید از حلقه استفاده کنید و هر سطر را به صورت جداگانه ثبت کنید. و برای اینکه قابل تشخیص باشه که این تعداد سطر ها به همدیگه ربط داره باید از یک فیلد کلیدی استفاده کنی مثلا اگر دیتا گرید یک فاکتور باشه شماره فاکتور رو به عنوان فیلد تکراری در نظر می گیری و تمام سطر ها و هر وقت خواستی این غکتور رو ببینی شماره فاکتور رو به عنوان فیلتر در نظر می گیری.
در مورد سوال اولت متوجه منظورت نشدم.

حلقه رو خودم بلدم اما میخوام به صورت کلی پر بشه
سوال اولم این بود که چطوری من یک سطر رو در دیتا گرید با کد نویسی ویرایش کنم؟

mina.net
چهارشنبه 12 فروردین 1388, 20:22 عصر
خوب اینقدر لازم نبود مطلب رو بپیچونی. از کد زیر برای تغییر مقدار یک سلول می تونی استفاده کنی.


DataGridView1.Rows(شماره سطر).Cells(شماره ستون).Value = مقدار جدید

zoofa
چهارشنبه 12 فروردین 1388, 23:04 عصر
دوستان من چند مشکل با دیتا گرید دارم
1.من با کد زیر یک سطر در دیتاگرید درست میکنم



DataGridView1.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text, ComboBox1.Text)
خوب حالا می خواهم اگه سطری در دیتا گرید که قبلا وجود داشت که مقدار TextBox1.Text و ستون اول برابر بود بجایی اینکه سطری اضافه شود سطر ی که TextBox1.Text و ستون اول آن با هم برابر است آپدیت شود و فقط مقدار ستون چهارم و ComboBox1.Text با هم جمع شود.(من نمیتونم با کد یک سطر در دیتا گرید را ویرایش یا آپدیت کنم)؟



سلام دوست عزيز
از اين كد استفاده كنيد




dim blnFlag as boolean
for I as integer = 0 to datagridview1.rows.count -1
if datagridview1.item(0,I).value = textbox1.text then
datagridview1.item(3,i).value += val(combobox1.text)
blnflag = true
exit for
end if
next
if not blnflag then
DataGridView1.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text, ComboBox1.Text)
end if

zoofa
چهارشنبه 12 فروردین 1388, 23:09 عصر
دوستان من چند مشکل با دیتا گرید دارم


2. من بوسیله کد و OleDbCommand هر وقت سطری به برنامه اضافه میشود ان را به دیتا بیس اضافه میکنم. حالا اگه بخواهم چند سطر یا محتوای یک دیتا گرید را به دیتابیس اضافه کنم باید چه کاری انجام بدهم؟


از چه روشي استفاده كردين براي ريختن اطلاعات در ديتابيس
كدتون را بزاريد تا دوستان راهنمايي تون كنند

bastakboys
پنج شنبه 13 فروردین 1388, 00:57 صبح
از چه روشي استفاده كردين براي ريختن اطلاعات در ديتابيس
كدتون را بزاريد تا دوستان راهنمايي تون كنند



Cm = New OleDbCommand("insert into khorak (kname,ghimat) values ('" & TextBox2.Text.ToString & "','" & TextBox3.Text.ToString & "' )", Cn)

bastakboys
پنج شنبه 13 فروردین 1388, 13:57 عصر
دوستان من برای جمع دو سل از یک ردیف از کد زیر استفاده می کنم اما مشکل داره شما چیزی به نظرتون نمی رسه.



Private Sub DataGridView1_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArg s) Handles DataGridView1.RowsAdded
If e.RowIndex.ToString = "-1" Then
Exit Sub
Else
Try
If DataGridView1.Rows(e.RowIndex).Cells(2).Value() And DataGridView1.Rows(e.RowIndex).Cells(3).Value() <> "" Then
DataGridView1.Rows(e.RowIndex).Cells(4).Value() = DataGridView1.Rows(e.RowIndex).Cells(2).Value() * DataGridView1.Rows(e.RowIndex).Cells(3).Value()
'-------مجموع مبالغ
Dim sum, dd As Integer
sum = 0
For dd = 0 To DataGridView1.RowCount - 1
sum = DataGridView1.Rows(dd).Cells(4).Value + sum
Next
TextBox6.Text = sum
'--------
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub


در ضمن یک مرجع کامل فارسی در باره این کد های استرینگی که با اون به بانک اطلاعاتی وصل می شیم ندارید.

zoofa
پنج شنبه 13 فروردین 1388, 14:50 عصر
سلام دوست عزيز
شما كدتون رو در رويداد rows_added نوشتيد
وقتي كه يك رديف به ديتاگريدويو اضافه مي شه اين كد بلافاصله اجرا مي شه و در آن زمان كه اين كد اجرا مي شه هيچ مقداري در خانه هاي رديف جاري وجود ندارد و خالي است براي همين خطا دريافت مي كنيد

براي رفع اين كار كدتون را در رويداد row_leave بنويسيد كه وقتي از يك رديف بيرون مي رود اين كد اجرا شود (در اين صورت در خانه هاي رديف مقدار وارد كرده ايد)

از اين كد هم مي توانيد استفاده كنيد.





Private Sub DataGridView1_RowLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowLeave
If e.RowIndex = -1 Then
Exit Sub
End If
If IsNumeric(DataGridView1.Item(2, e.RowIndex).Value) And IsNumeric(DataGridView1.Item(3, e.RowIndex).Value) Then
DataGridView1.Item(4, e.RowIndex).Value = Val(DataGridView1.Item(2, e.RowIndex).Value) * Val(DataGridView1.Item(3, e.RowIndex).Value)

Dim intSum As Integer
For I As Integer = 0 To DataGridView1.Rows.Count - 1
intSum += Val(DataGridView1.Item(4, I).Value)
Next
TextBox6.Text = intSum

End If
End Sub




هميشه سعي كنيد وقتي كه رديف هاي يك ديتاگريد را مي سازيد براي هر ستون نامي مناسب با كاري كه انجام مي دهد براي آن انتخاب كنيد و بجاي دادن شماره انديس ستون از نام آن ستون استفاده كنيد.
مي توانيد از آن به اين صورت استفاده كنيد



datagridview1.item("plus" , e.rowindex).value = "newvalue"


با انجام اين كار هم خوانايي برنامه افزايش پيدا مي كند و هم در آينده اگر خواستيد بين ستونهاي يك ديتاگريد ستوني اضافه كنيد براحتي اضافه مي كنيد و چون از نام ستونها استفاده كرده ايد برنامه به هم نمي ريزد و اگر از انديس استفاده كرده باشيد چون با اضافه كردن ستون شماره انديس ها عوض مي شود برنامه هم مشكل پيدا مي كند.

zoofa
پنج شنبه 13 فروردین 1388, 14:56 عصر
در ضمن یک مرجع کامل فارسی در باره این کد های استرینگی که با اون به بانک اطلاعاتی وصل می شیم ندارید.

براي اطلاعات بيشتر در اين زمينه مي تونيد به سايت http://www.connectionstrings.com/ مراجعه نمائيد

bastakboys
پنج شنبه 13 فروردین 1388, 18:00 عصر
دوست عزیز رویداد DataGridView1_RowLeave مشکل داره و کاری را که در این رویداد قرار دادین رو وقتی انجام می ده که با موس روی دیتا گرید کلیک کنیم و از سطری به سطر دیگر برویم
اما با این حال از توجه تون ممنونم

zoofa
پنج شنبه 13 فروردین 1388, 18:36 عصر
دوست عزيز وقتي شما با كيبرد اطلاعات را وارد كنيد وقتي كه tab مي زنيد اتوماتيك به سطر بعدي مي رود و كد اجرا مي شود
تا حالا نشنيده بودم با ماوس اطلاعات را وارد مي كنند!!

شما مي تونيد رديف آخر را readonly = true قرار دهيد تا ديگر كاربر نتواند در رديف آخر اطلاعات وارد كند.
:چشمک::لبخندساده:

bastakboys
پنج شنبه 13 فروردین 1388, 22:11 عصر
دوست عزيز وقتي شما با كيبرد اطلاعات را وارد كنيد وقتي كه tab مي زنيد اتوماتيك به سطر بعدي مي رود و كد اجرا مي شود
تا حالا نشنيده بودم با ماوس اطلاعات را وارد مي كنند!!

شما مي تونيد رديف آخر را readonly = true قرار دهيد تا ديگر كاربر نتواند در رديف آخر اطلاعات وارد كند.
:چشمک::لبخندساده:

دوست عزیز من اطلاعات رو به وسیله یک بوتون از یک فرم دیگه وارد میکنم کدش چند پست قبلی اومده و احتیاجی به این ندارم که در دیتا گرید کلید تب را بزنم
وقتی با این کد وارد می کنم در دیتا گرید سطر ها سلکت نمی شود که رویداد row_leave رخ بدهد.

bastakboys
شنبه 15 فروردین 1388, 16:24 عصر
If e.RowIndex = -1 Then
Exit Sub
End If
If IsNumeric(DataGridView1.Item(2, e.RowIndex).Value) And IsNumeric(DataGridView1.Item(3, e.RowIndex).Value) Then
DataGridView1.Item(4, e.RowIndex).Value = Val(DataGridView1.Item(2, e.RowIndex).Value) * Val(DataGridView1.Item(3, e.RowIndex).Value)

Dim intSum As Integer
For I As Integer = 0 To DataGridView1.Rows.Count - 1
intSum += Val(DataGridView1.Item(4, I).Value)
Next
TextBox6.Text = intSum

End If


به نظر شما کد بالا را در چه رویدادی از دیتا گرید بگزارم تا درست کار بکند؟