PDA

View Full Version : سوال: ذخیره مستقیم در دیتا گرید ویو datagrid view در VB.NET (توضیحات به همراه کد)



tolid123456789
شنبه 14 شهریور 1394, 11:10 صبح
سلام
من برنامه ای نوشتم که یک کلاس داره به نام MYDB

Imports System
Imports System.Data
Imports System.Data.SqlClient
Public Class MyDB
Public error_farsi As Boolean = False
Public lasterror As String = ""
Public con As New SqlConnection("data source=.;integrated security=true; database=dbname")
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Public Sub connect()
If con.State = ConnectionState.Closed Then con.Open()
End Sub
Public Sub disconnect()
If con.State = ConnectionState.Open Then con.Close()
End Sub
Public Function selectt(ByVal sql As String) As DataTable
'خروجي اين تابع يك جدول - ديتا تيبل است
cmd.CommandText = sql
cmd.Connection = con
Dim dt As New DataTable
Try
da.SelectCommand = cmd
da.Fill(dt)
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return (dt)
End Function
Public Sub docommand(ByVal sql As String)
lasterror = ""
Try
cmd.CommandText = sql
cmd.Connection = con
cmd.ExecuteNonQuery()
Catch ex As Exception
If error_farsi = True Then
lasterror = "خطا در ثبت اطلاعات"
Else
lasterror = ex.Message
End If
End Try
End Sub
End Class

حالا برای نمایش جدول مورد نظرم از کلاسی به نام table1_class استفاده کردم:

Public Class table1_class
Dim db As New MyDB
Public id_personal As String


Public Function table1_by_idpersonal() As DataTable
'خروجي جدول
'لیست نمرات بر حسب شماره دانشجویی را بر می گرداند
Dim sql As String = "select * from table1_tbl where id_personal='{0}' ORDER BY nomre"
sql = String.Format(sql, id_personal)
Dim dt As New DataTable()
db.connect()
dt = db.selectt(sql)
db.disconnect()
Return dt
End Function
End Class


حالا در فرمم یک دیتا گرید گذاشتم که با زدن شماره دانشجو از textbox1 نمرات دانشجو در datagrid1 نمایش داده میشه:

Dim table1class As New table1_class

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
table1class.id_personal = textbox1.Text
Try
datagrid1.DataSource = table1class .table1_by_idpersonal()

Catch ex As Exception
MsgBox("Error:01")
End Try

End Sub



حالا می خوام وقتی مقداری در دیتا گریدم رو کاربر تغییر داد (برای مثال نمره درس خاصی) با زدن یک دکمه این اطلاعات ذخیره بشه.
یک راه حل این بود که برای تغییر هر رکورد در دیتا گرید روی اون دابل کلیک می کردم و یه فرم دیگه درست می کردم و اطلاعات همون رکورد رو توش صدا می زدم و با تغییر مقادیر توسط کاربر با یک Update ذخیره سازی انجام می شد و زمانی که فرم دوم بسته می شد دیتا گریدم Refresh می شد.
این روش در زمانی که شما بخواید مقادیر زیادی از دیتا گرید رو تغییر بدید بسیار وقت گیره.
در روش Wizard که دیتا ست و ... رو می نداختیم رو فرم بسیار ساده می تونستیم کدی داشته باشیم که با تغییر مستقیم کاربر روی دیتا گرید مقادیر ذخیره بشند. ولی با روش اولی که کدها و توضیحاتش رو دادم نمی دونم چه کار باید بکنم که با تغییر مستقیم کاربر بر روی دیتا گرید ذخیره سازی انجام بشه.

لطفا راهنمایی کنید
با تشکر

oranoos
یک شنبه 15 شهریور 1394, 14:01 عصر
با سلام
شما می تونید یکی از سلول ها رو به عنوان ویرایش تعریف کنید که کاربر با زدن روی این سلول که معملا از نوع buttonتعریف میشه اطلاعات وارد شده همان سطر رو ویرایش کنه

tolid123456789
یک شنبه 15 شهریور 1394, 14:54 عصر
سلام
ممنون از جوابتون
ولی من با دیتا گریدی روبرو هستم که کاربر باید داده ها رو در سلول هاش مثل اکسل پشت سر هم وارد و با زدن یک دکمه ذخیره سازی کنه. این کار با روش ویزاردی بسیار ساده بود ولی روش کد نویسی رو نمی دونم.


لطفا راهنمایی کنید.

tolid123456789
دوشنبه 16 شهریور 1394, 09:32 صبح
سلام
ظاهرا با کد زیر میشه یک دیتا گرید رو update کرد

Public Class test1
Dim con As New SqlConnection("data source=.;integrated security=true; database=db1")
Dim da As New SqlDataAdapter
Dim ds As New DataSet("ds1")


Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles hardness_paper_txt.TextChanged


Dim sql As String = "select * from tbl1 where id='{0}' "
sql = String.Format(sql, id_txt.Text)
Dim cmd As New SqlCommand(sql)
cmd.Connection = con
da.SelectCommand = cmd
If con.State = ConnectionState.Closed Then con.Open()
da.Fill(ds, "ds1")
con.Close()
datagrid1_dgv.DataSource = ds
datagrid1_dgv.DataMember = "ds1"


End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim cmd As New SqlCommandBuilder(da)
da.UpdateCommand = cmd.GetUpdateCommand
da.Update(ds.Tables("ds1"))
datagrid1_dgv.DataSource = ds
datagrid1_dgv.DataMember = "ds1"


End Sub
End Class


وقتی داخل تکست باکس id رو تایپ می کنم وقتی تو جدولم باشه رکوردهای متناظر با اون رو در دیتا گرید نمایش میده.
بعد از اینکه مقداری رو تو دیتا گرید تغییر دادم با زدن دکمه اون مقدار ذخیره میشه.
1- پس از ذخیره مقدار مورد نظر اگه یک id دیگه رو تایپ کنم رکوردهای id قبلی باقی می مونند و رکوردهای id جدید به دیتا گرید اضافه می شند.
2- نحوه کد نویسی بنده همانطور که در اولین پست این صفحه عرض کردم توسط 2 تا کلاس انجام میشه، من تو کد نویسی در یک فرمش (کد بالا) موندم حالا با فرض حل شدن مشکل بالا چه جوری این کد ها رو تو اون 2 کلاس قرار بدم.

شاید سئوالم خیلی ابتدایی و غیر حرفه ای باشه ولی بدجور مشکل خوردم. می خوام یه برنامه رو شروع کنم به نوشتن نمی خوام از حالت ویزاردی VB.net استفاده کنم .

لطفا کمک کنید.

tolid123456789
دوشنبه 16 شهریور 1394, 10:28 صبح
سلام
من مشکل اول در پست 4 رو با اضافه کردن

ds.Clear()

قبل از

da.Fill(ds, "ds1")

حل کردم.
حالا مشکل اصلی اینجاست که چه جوری این کد ها رو در قالب اون دو تا کلاس (پست1) قرار بدم.



لطفا راهنمایی کنید
با تشکر