ايران ويج

نسخه‌ی کامل: updateو search و پر کدن مجدد DataGridView در vb.net2005
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
باسلام ... باسلام ...
سه تا مشکل دارم لطفا منو راهنمایی کنید :
1- چگونگی refresh کردن DataGridView یا پر کردن مجدد DataGridView

2- نحوه ی درست بار و بسته کردن ‍‍‍connectionها

3- استفاده درست از ExecutenonQery

مثلا " در مورد سوال 2 من یک جستجو دارم که برای هر فیلد از آن استفاده می کنم و فقط نام فیلدم را عوض می کنم در صورتی که یک بار جستجو کنم درست کار میکنه ولی اگر دوباره جستجو کنم پیغام خطا میده :
The connection was not closed. The connection's current state isopen


و کد این جستجو به صورت زیر است :

PrivateSubcmdsearch_Click(ByValsenderAsSystem.Object, ByValeAsSystem.EventArgs) Handlescmdsearchcompany.Click
DimsqlAsString
sql = "SELECT tel.CompanyName, tel.DIRECTOR, tel.TELEPHONE, tel.Fax, tel.ADDRESS, tel.DESCRIPTION FROM telwhere tel.CompanyName like "
sql = sql & "'%" & TxtCN.Text & "%';"
'sql = sql & " ortel.DIRECTOR like "
'sql = sql & "'%" & txtDI.Text & "%';"
objconnection.Close()
objconnection.Open()
DimobjdataadapterAsNewOleDbDataAdapter(sql, objconnection)
objdataadapter.Fill(objdataset, "tel")
DataGridView1.DataSource = objdataset
DataGridView1.DataMember = "tel"
DataGridView1.AlternatingRowsDefaultCellStyle.Back Color = Color.Thistle
EndSub


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

حال میرسیم سر مشکل 3 .... کد زیر جهت updateکردن است :

PrivateSubcmdedit_Click(ByValsenderAsSystem.Object, ByValeAsSystem.EventArgs) Handlescmdedit.Click
DimstrAsString
str = "update tel setCompanyName="
str = str & "'"
str = str & TxtCN.Text & "',"
str = str & "DIRECTOR="
str = str & "'"
str = str & txtDI.Text & "',"
str = str & "TELEPHONE="
str = str & "'"
str = str & txttel.Text & "',"
str = str & "fax="
str = str & "'"
str = str & txtfax.Text & "',"
str = str & "ADDRESS="
str = str & "'"
str = str & txtaddr.Text & "',"
'str = str & "DIRECTOR="
'str = str & "'"
'str = str & txtaddr.Text & "',"
str = str & "DESCRIPTION="
str = str & "'"
str = str & txtdec.Text & "'"
str = str & "whereCompanyName="
str = str & "'"
str = str & TxtCN.Text
str = str & "'"
DimcmdAsSystem.Data.OleDb.OleDbCommand
cmd = NewSystem.Data.OleDb.OleDbCommand
cmd.CommandText = str
cmd.Connection = objconnection
'objconnection.Open()
cmd.ExecuteNonQuery()
DataGridView1.Update()
'objconnection.Close()
DataGridView1.Refresh()
End sub


اولا" در کد بالا در همان هنگام update شدن تغییرات در DataGridView نمایش داده نمیشود و اگر عمل دیگری مثل delet را انجام دهیم وبعد عمل update را انجام دهیم خطای زیر را میدهد :

ExecuteNonQuery requires an open and available Connection. Theconnection's current state is closed.

توجه :
1- من از dataset1 استفاده نمیکنم که بخواهم clear کنم .
من به صورت زیر تعریف کردم :
Dim objdataset AsNew DataSet
Dim objdataadapter AsNew OleDbDataAdapter(strsqlforgrid, objconnection
و به صورت زیر پر کردم
objdataadapter.Fill(objdataset, "tel
DataGridView1.DataSource = objdataset
2- connection به یک Mdb است
Public objconnection AsNew OleDbConnection(strconnection



پیشاپیش از مساعدت شما سپاس گذارم...
3) اون خطایی که میده که داره میگه که باید connection باز باشه.شما اومدی قبل دستور بازش کردی و بعد دستور بستیش. ولی این باز و بسته کردنو توضیحی کردی. خوب اجرا نمیشه. اگه قبلا connection رو باز کردی که هیچ وگرنه خطا میده دیگه.

2) در ضمن من جستجو هامو اینجوری انجام میدم:

Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\A.mdb;Persist Security Info=False")
Dim da As New OleDbDataAdapter("select * from st", cnn)

Dim dt As New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt

دوتا خط اولو توی فرم تعریف میکنم.دوتاخط دوم هم رو توی رویداد کلیک انجام میدم. هیچ مشکلی هم نداه.

1) اگه فقط refresh میخوای خب خودش یه تابع refresh داره.. ولی اگه میخوای داده ها رو دوباره از جدول بخونه.اونوقت datagrideview کاره ای نیست. اون اطلاعاتشو از datasource میخونه. شما باید datatable یا dataset تون رو دوباره fill کنید (البته باید اول clear کنید بعد fill کنید).همین. میتونید برای اطمینان datagrideview هم رو refresh کنید.

و در ضمن یه پیشنهاد.
به جای اونهمه استفاده از & از عملگر =& هم میتونی استفاده کنی.هم کدت کمتر میشه. هم کارت راحتتر میشه و از اسمای مخفف برای راحتی کار استفاده نمیکنی.