PDA

View Full Version : آموزش: ذخیره اطلاعات DataGridView تو ریجستری!



Saman_12
سه شنبه 12 مرداد 1389, 22:07 عصر
سطح آموزش مبتدی میباشد!:قهقهه:
تا حالا دلتون خاسته به هر دلیلی اطلاعات یک DataGridView رو توی ریجستری ثبت کنین یا از ریجستری بخونین اگه خواسته نظر شما رو به بقیه آموزش جلب می نمایم.
خوب توی این آموزش میخوام اطلاعات یک DataGridView رو توی ریجستری ثبت کنیم و بعدش هم اطلاعات رو بخونیم و از اطلاعات یک Export (ذخیرش کنیم توی یک فایل) بگیریم!
کامپونت ها و کد های مورد نیاز جهت تهیه برنامه. :قهقهه::قهقهه: :
اول 4 تا باتون با نام های Button1 , Button2 , Button3 , Button4 به فورم تون اظافه کنید و Text هاشون رو به ترتیب :
Button1 = Save
Button2 = Load
Button3 = Export
Button4 = Import
بزارین و یک DataGridView به نام DataGridView1 هم اظافه کنید.و چند تا سطر هم به DataGridview اظافه کنید(Columns).
کد زیر رو توی کد ادیتور .net وارد کنید :

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Row, Col As Integer
Dim DataIt, DataDE As String
For Row = 0 To DataGridView1.RowCount - 1
For Col = 0 To DataGridView1.ColumnCount - 1
DataIt = DataGridView1.Item(Col, Row).Value
If DataIt = Nothing Or DataIt = "" Then
DataIt = ""
End If
SaveSetting(My.Application.Info.AssemblyName, "Row", Col & Row, DataIt)
DataDE = GetSetting(My.Application.Info.AssemblyName, "Row", Col & Row, "")
If DataDE = "" Then
DeleteSetting(My.Application.Info.AssemblyName, "Row", Col & Row)
End If
Next Col
Next Row
SaveSetting(My.Application.Info.AssemblyName, "Row", "Max", DataGridView1.ColumnCount - 1)
SaveSetting(My.Application.Info.AssemblyName, "Row", "Min", DataGridView1.RowCount - 2)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Row, Col As Integer
Dim Row_, Col_ As String
Row_ = GetSetting(My.Application.Info.AssemblyName, "Row", "Min", 0)
Col_ = GetSetting(My.Application.Info.AssemblyName, "Row", "Max", 0)

DataGridView1.RowCount = Row_ + 2
DataGridView1.ColumnCount = Col_ + 1
For Row = 0 To Row_
For Col = 0 To Col_
DataGridView1.Item(Col, Row).Value = GetSetting(My.Application.Info.AssemblyName, "Row", Col & Row)
Next Col
Next Row
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Shell("Reg Export " & """" & "hkcu\Software\VB and VBA Program Settings\" & My.Application.Info.AssemblyName & """" & " " & """" & Application.StartupPath & "\InfoData.Reg" & """", AppWinStyle.Hide, Wait:=True)
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Shell("Reg Import " & """" & Application.StartupPath & "\InfoData.Reg" & """")
End Sub
End Class

خوب آموزش تموم شد ببخشین که سطح آموزش های من مبتدیه.:لبخند:

FastCode
سه شنبه 12 مرداد 1389, 22:13 عصر
دقیقا" چه کار میکنه؟
meta data رو ذخیره میکنه یا خود دیتا رو و این که چرا رجیستری.
ببخشید که نمیخوام رجیستریم رو خراب کنم که بفهمم.

Saman_12
سه شنبه 12 مرداد 1389, 22:20 عصر
دقیقا که نه ولی تقریبا مثل ذخیره توی پایگاه داده میمونه(البته پایگاهی که میشه توش فقط مقدار رشته ای اظافه کرد.)
و اما دلیلش که چرا ریجستری چون بعضی ها مثل من از پایگاه داده بدشون میاد نافورم(می دونم پایگاه داده خیلی خوبه در باره اینکه کدوم روش بهتره در بهتر بودن پایگاه داده شکی نیست اما ....)
2.برای ذخیره اطلا عات احتیاج به نصب Sql و اینجور مخلفات نیست!

Saman_12
چهارشنبه 13 مرداد 1389, 11:02 صبح
یک نظریه به ذهنم رسید اونم اینکه اگه بشه داخل اطلاعات ذخیره شده جستجو کرد چه شود!:کف:
برای این کار میتونید یه فورم دیگه به بر نامه بالا اظافه کنید وداخل اون فورم یک DataGridView به نام DataGridView1 اظافه کنید ویه باتون به نام Button1 و یه تکست با کس به نام TextBox3 به فور متون اظافه کنید.
توی فورم اول یک سطر اظافه کنید با تکست Number (باید آخرین سطر باشه) و یه باتون که فورم دوم رو نشون بده کد زیر رو هم توی فورم اول وارد کنید :


Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

Dim Row, Col As Integer
For Col = 0 To DataGridView1.ColumnCount - 1
For Row = 0 To DataGridView1.RowCount - 1
If DataGridView1.Item(Col, Row).Value <> Nothing Then
DataGridView1.Item(DataGridView1.ColumnCount - 1, Row).Value = Row
End If
Next Row
Next Col
End Sub

این کد نوشته آخرین سطر رو یک عدد در نظر میگره که صعودی هستش.
این کد رو هم توی فورم دوم وارد کنید :


Public Class Form2

Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
e.Handled = True
Select Case e.KeyChar
Case "0" To "9"
e.Handled = False
Case Chr(8)
e.Handled = False
Case Chr(Keys.Enter)
Button1_Click(sender, e)
End Select
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Row, Col As Integer
Dim Row_, Col_ As String
Row_ = TextBox3.Text
Col_ = GetSetting(My.Application.Info.AssemblyName, "Row", "Max", 0)
Row = Row_
For Col = 0 To Col_
DataGridView1.Item(Col, 0).Value = GetSetting(My.Application.Info.AssemblyName, "Row", Col & Row)
Next Col
End Sub

Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = True
Form1.Enabled = True
e.Cancel = False
End Sub

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form1.Enabled = False
End Sub

حالا میتونید توی فورم دوم با ورد کردن یک عدد بقیه اطلاعات رو توی دیتا گرید ویو ببینید در ضمن تعداد سطر های دیتا گرید ویو فورم دوم باید با دیتا گرید ویو فورم اول برابر باشه!

Saman_12
چهارشنبه 13 مرداد 1389, 11:05 صبح
برای اینکه کل آموزش رو بهتر درک کنید میتونید سورس زیرو دانلود کنید(برای باز شدن فورم سرچ باید روی فورم راست کلیک کنید) :

Saman_12
جمعه 15 مرداد 1389, 11:11 صبح
سورس دفعه قبل رو کمی قشنگ تر جمع و جور تر وکاربر پسند تر کردم البته کمی هم پیشرفته تر(قابلیت جستجو جد:کف:ید) براتون ضمیمه می کنم تا استفاده کنین:لبخند: :
فقط اینو بگم برای حذف داده های سطر مربوط یه یک ستون کافیه مقدار های سطر مربوط به اون ستون رو حذف کنید.