PDA

View Full Version : سلکت کردن یک رکورد مورد نظر در دیتاگرید



swallow.pa
سه شنبه 01 فروردین 1391, 20:16 عصر
سلام به همه
دوستان توی یکی از فرمهام اطلاعاتی نمایش داده میشه که توی گریده
خب کاربر با دبل کلیک بر روی یکی از رکوردهای گرید صفحه اصلاح رو می بینه اصلاحات رو انجام می دهد و دوباره صفحه گرید باید رفرش بشه
چون گرید حاصل یک کوئریه پس ترتیب رکوردها بهم میخوره حالا من می خوام قبل از این کار رکورد بوکمارک بشه و بعد از اصلاح همون رکورد که رفرش شده برای کاربر نمایش بدهد
باید چیکار کنم
ممنون

aftabeshargh
سه شنبه 01 فروردین 1391, 20:51 عصر
این هم دقیقا مشکل منه :ناراحت: بعد از ویرایش و بسته شدن فرم ویرایش و برگشت به فرم رکورد ها " رکورد هارو که رفرش و بازخوانی مجدد میکنم "رکورد ها حرکت میکنن و دوباره باید کاربر بگرده دنباله رکورد مورد نظرش .

فرید نجفلو
چهارشنبه 02 فروردین 1391, 01:15 صبح
اگه نمی خواید با دستورات SQL و یکسری جزئیات کار کنید می تونید قبل از ورود به حالت ویریش، ستون ID رو تو یه لیست نگه دارید بعد وقتی ویریش و رفرش انجام شد سطر ها رو با همون لیست دوباره مرتب کنید!
البته این جواب سوالتون بود
اما در روش عمل کرد شما یه چیزی غیر طبیعیه!
مگه شما فقط یک سطر رو اصلاح نمی کنید پس چرا همه رفرش میشن!
اگه هم دیتا سورس یک DataTable باشه وقتی شما یک سطر رو اصلاح کردید ترتیب سطر های DataTable به هم نمی خوره!
شما چطوری اصلاحات رو اعمال و رفرش می کنید؟

aftabeshargh
چهارشنبه 02 فروردین 1391, 02:09 صبح
سلام
استفاده از این روش اشتباست ؟



Public Function SelectQuery(ByVal Query As String) As DataTable

Dim pConnection As New SqlConnection
Dim pCommand As New SqlCommand
Dim pDataAdapter As New SqlDataAdapter
Dim pDataTable As New DataTable

pConnection.ConnectionString = "Data Source=PC1;Initial Catalog=dbjahedi;Integrated Security=True"
pCommand.Connection = pConnection
pCommand.CommandType = CommandType.Text

pConnection.Open()

pDataTable.Clear()
pCommand.CommandText = Query
pDataAdapter.SelectCommand = pCommand
pDataAdapter.Fill(pDataTable)

pConnection.Close()

Return pDataTable

End Function


وقتی میخوام اطلاعات رو از دیتابیس بیارم تو جدول روی فرم :(توی لود)


Dim Dt as New DataTABEL
Dt= SelectQuery("select * from Table1")
datagridview1.datasource=dt


برای رفرش هم بعد از ویرایش یک رکورد (برای نمایش اطلاعات اصلاح شده در جدول فرم) راه حلی به ذهنم نرسید جز اینکه دوباره از دستور بالا استفاده کنم و کلا فراخوانی کنم (که هم کنده و هم کلا رکورد ها رو مجدد فراخوانی میکنه که این خوب نیست) و باعث میشه تو فرم بعد از رفرش" رکورد مورد نظر کاربر از جلو چشمش فرار کنه !
1- روش درست رفرش جدول در فرم بعد از ویرایش رکورد به چه صورته ؟
2- استفاده از دستور dim dt as new datatabel و ذخیره موقت کل رکوردها درون dt درسته ؟ اگه اشتباست " راهکار درستش چیه ؟

Hybrid
چهارشنبه 02 فروردین 1391, 03:04 صبح
سلام دوستان ، خوب واسه اینکار میتونین خودتون یک تابع بنویسین تا همین کار رو واستون انجام بده.

ali190
چهارشنبه 02 فروردین 1391, 03:13 صبح
سلام
من خودم با این قضیه مشکل دارم ، چون بعد از ایجاد تغییر در یک رکورد مجبورم کل گریدم رو رفرش کنم و اون رو دوباره با اطلاعات پر کنم
این کار در حجم بالای رکورد بسیار پرهزینه هست
متاسفانه در بسیاری از آموزشهای موجود در این تالار هم از این روش استفاده شده ، مثلاً با Sub زیر بعد از ایجاد هر تغییری باید کل مطالب رفرش بشه:


Sub loaddata()
dt.Clear()
ad = New OleDbDataAdapter("Select * from Table1", cnnstring)
cmdb = New OleDbCommandBuilder(ad) 'this object can make sql command for every change in data table
ad.Fill(dt)
grdAuthorTitles.DataSource = dt
End Sub
البته من یه ایده ای دارم که میتونه کمک کنه
شما عوض اینکه بیایید همه رکوردها رو رفرش کنید میتونید با استفاده از روش زیر فقط همون رکورد رو بروز کنید;
فرض کنید نام گریدتون grdAuthorTitles هست
شما چند تا تکست باکس دارید که وقتی رو هر رکورد میرید اون تکست باکس ها بافیلدهای مختلف رکورد جاریتون تو گرید پر میشه
حالا میخواهید رکورد جاریتون رو تغییر بدید
فرض کنید میخواهید این کار رو با یه Update Query انجام بدید
بعد از اینکه بروزرسانی با موفقیت انجام شد ، بیایید عکس عمل بالا رو انجام بدید ، یعنی هنگام ویرایش این تکست باکسهاتون بود که با سلول های رکورد جاریتون تو گرید پر میشد ، حالا بعد از بروزرسانی این سلولهای رکورد جاری گریدتون هست که با همون تکست باکسه پر میشه
کد زیر رو ملاحظه کنید:


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Try
Dim cnn As New OleDbConnection(cnnstring)
Dim cmd As New OleDbCommand("update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = " & CInt(TextBox7.Text), cnn)
If cnn.State = ConnectionState.Closed Then cnn.Open()
With cmd
.Parameters.Clear()
.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
.Parameters.AddWithValue("@pedar", Trim(TextBox5.Text))
.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))
.ExecuteNonQuery()
End With
cnn.Close()
MsgBox("رکورد مورد نظر بروزرسانی شد", MsgBoxStyle.Information)
loaddata()
grdAuthorTitles.CurrentRow.Cells(1).Value = TextBox1.Text
grdAuthorTitles.CurrentRow.Cells(2).Value = TextBox2.Text
grdAuthorTitles.CurrentRow.Cells(3).Value = ComboBox1.Text
grdAuthorTitles.CurrentRow.Cells(5).Value = TextBox3.Text
grdAuthorTitles.CurrentRow.Cells(4).Value = TextBox4.Text
grdAuthorTitles.CurrentRow.Cells(6).Value = TextBox5.Text
grdAuthorTitles.CurrentRow.Cells(7).Value = TextBox6.Text
grdAuthorTitles.CurrentRow.Cells(0).Value = TextBox7.Text
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Exclamation)
End Try
End Sub
با این دستور فقط و فقط همون رکورد تغییر پیدا میکنه و بس
امیدورام منظورم رو رسونده باشم
یاعلی

barnamenevisforme
چهارشنبه 02 فروردین 1391, 10:32 صبح
سلام،عید همگی مبارک،امیدوارم سال پر برکتی داشته باشید.
اگه مسئله حجم بالای record ها وجود نداره،قبل از refresh کردن،مشخصه uniq ریکورد مثل id رو -که میتونی توی datagrid اونو نمایش بدی و یا به صورت invisible داشته باشی- در نظر بگیر.بعد از refresh توی datagridاون سطری که این مشخصه رو داره به عنوان currentrow انتخاب کن.

aftabeshargh
چهارشنبه 02 فروردین 1391, 12:32 عصر
سلام
من خودم با این قضیه مشکل دارم ، چون بعد از ایجاد تغییر در یک رکورد مجبورم کل گریدم رو رفرش کنم و اون رو دوباره با اطلاعات پر کنم
این کار در حجم بالای رکورد بسیار پرهزینه هست
متاسفانه در بسیاری از آموزشهای موجود در این تالار هم از این روش استفاده شده ، مثلاً با Sub زیر بعد از ایجاد هر تغییری باید کل مطالب رفرش بشه:


Sub loaddata()
dt.Clear()
ad = New OleDbDataAdapter("Select * from Table1", cnnstring)
cmdb = New OleDbCommandBuilder(ad) 'this object can make sql command for every change in data table
ad.Fill(dt)
grdAuthorTitles.DataSource = dt
End Sub
البته من یه ایده ای دارم که میتونه کمک کنه
شما عوض اینکه بیایید همه رکوردها رو رفرش کنید میتونید با استفاده از روش زیر فقط همون رکورد رو بروز کنید;
فرض کنید نام گریدتون grdAuthorTitles هست
شما چند تا تکست باکس دارید که وقتی رو هر رکورد میرید اون تکست باکس ها بافیلدهای مختلف رکورد جاریتون تو گرید پر میشه
حالا میخواهید رکورد جاریتون رو تغییر بدید
فرض کنید میخواهید این کار رو با یه Update Query انجام بدید
بعد از اینکه بروزرسانی با موفقیت انجام شد ، بیایید عکس عمل بالا رو انجام بدید ، یعنی هنگام ویرایش این تکست باکسهاتون بود که با سلول های رکورد جاریتون تو گرید پر میشد ، حالا بعد از بروزرسانی این سلولهای رکورد جاری گریدتون هست که با همون تکست باکسه پر میشه
کد زیر رو ملاحظه کنید:


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Try
Dim cnn As New OleDbConnection(cnnstring)
Dim cmd As New OleDbCommand("update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = " & CInt(TextBox7.Text), cnn)
If cnn.State = ConnectionState.Closed Then cnn.Open()
With cmd
.Parameters.Clear()
.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
.Parameters.AddWithValue("@pedar", Trim(TextBox5.Text))
.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))
.ExecuteNonQuery()
End With
cnn.Close()
MsgBox("رکورد مورد نظر بروزرسانی شد", MsgBoxStyle.Information)
loaddata()
grdAuthorTitles.CurrentRow.Cells(1).Value = TextBox1.Text
grdAuthorTitles.CurrentRow.Cells(2).Value = TextBox2.Text
grdAuthorTitles.CurrentRow.Cells(3).Value = ComboBox1.Text
grdAuthorTitles.CurrentRow.Cells(5).Value = TextBox3.Text
grdAuthorTitles.CurrentRow.Cells(4).Value = TextBox4.Text
grdAuthorTitles.CurrentRow.Cells(6).Value = TextBox5.Text
grdAuthorTitles.CurrentRow.Cells(7).Value = TextBox6.Text
grdAuthorTitles.CurrentRow.Cells(0).Value = TextBox7.Text
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Exclamation)
End Try
End Sub
با این دستور فقط و فقط همون رکورد تغییر پیدا میکنه و بس
امیدورام منظورم رو رسونده باشم
یاعلی

آفرین ، یعنی جای فراخونی مجدد کل رکورد ها " همونجا درحین اینکه دیتابیس رو آپدیت میکنیم " رکورد مورد نظر رو هم با تکست باکس های مربوطه سلول هاشو ویرایش میکنیم

aftabeshargh
چهارشنبه 02 فروردین 1391, 12:35 عصر
ولی خب برای حذف یک رکوررد دیگه مجبوریم کل رکورد هارو رفرش کنیم از دیتابیس

swallow.pa
چهارشنبه 02 فروردین 1391, 12:58 عصر
ولی خب برای حذف یک رکوررد دیگه مجبوریم کل رکورد هارو رفرش کنیم از دیتابیس
نیازی به رفرش نیست چونکه توی رکورد شما که ای دی تغییر نکرده اگه تغییر هم کرده باشه باز نیازی به رفرش نیست

barnamenevisforme
چهارشنبه 02 فروردین 1391, 15:54 عصر
نیازی به رفرش نیست چونکه توی رکورد شما که ای دی تغییر نکرده اگه تغییر هم کرده باشه باز نیازی به رفرش نیست

باز هم سلام
دوستان توجه کنن : در صورتی که کاربران دیگه،در حال ویرایش record های دیگه ای بوده باشن موقع ویرایش اون record که حالا مقدارش با مقدار موجود در grid متفاوته،دچار خطا میشیم،اصلا یکی از اهداف refresh کردن همینه که اخرین تغییرات اعمال بشه.

فرید نجفلو
چهارشنبه 02 فروردین 1391, 16:33 عصر
دوست عزیز اگه رکورد ها زیادن یا مسئله سرعت براتون مهمه می تونیئد برای این جدول (و در حالت کلی هر جدولی که خواستید) تو دیتا بیس یک تریگر ایجاد کنید و وقتی خواستید اطلاعات رو رفرش کنید فقط رکورد یایی رو که تغییر یا اضافه یا ID روکورد های حذف شده رو بگیرد )
البته این روش بسته به میزان تسلط شما به کار با پایگاه داده هاست
اگه شما تریگر رو یاد بگیرید می فهمید که کار های جلبی میشه باهاش کرد(برای نمونه من تو یکی از تاپیک ها (http://barnamenevis.org/showthread.php?332829-اطلاع-از-بروز-شدن-اطلاعات-در-بانک-اطلاعاتی-SQL-در-شبکه) به روش غیر معمول از تریگر استفاده کردم که کار نشدنی رو شدنی کرد!)

sh2007
پنج شنبه 03 فروردین 1391, 11:59 صبح
چرا مسئله رو زیاد پیچیده کردید
ببین swallow.pa شما وقتی رکوردها رو فراخوانی می کنید توی دیتاگرید این رکوردها هر کدومشون دارای یک موقعیت توی حافظه هستن مثلا شما گریدتون به BindingSource1 وصله خب این BindingSource1 خودش دارای یک موقعیته مثل BindingSource1.Position = 10 با این کد رکوردی که توی موقعیت 10 باشه سلکت میشه یعنی در حقیقت جستجو توی گریده
موفق باشید

nowar1352
پنج شنبه 03 فروردین 1391, 12:20 عصر
سلام
من خودم با این قضیه مشکل دارم ، چون بعد از ایجاد تغییر در یک رکورد مجبورم کل گریدم رو رفرش کنم و اون رو دوباره با اطلاعات پر کنم
این کار در حجم بالای رکورد بسیار پرهزینه هست
متاسفانه در بسیاری از آموزشهای موجود در این تالار هم از این روش استفاده شده ، مثلاً با Sub زیر بعد از ایجاد هر تغییری باید کل مطالب رفرش بشه:


Sub loaddata()
dt.Clear()
ad = New OleDbDataAdapter("Select * from Table1", cnnstring)
cmdb = New OleDbCommandBuilder(ad) 'this object can make sql command for every change in data table
ad.Fill(dt)
grdAuthorTitles.DataSource = dt
End Sub
البته من یه ایده ای دارم که میتونه کمک کنه
شما عوض اینکه بیایید همه رکوردها رو رفرش کنید میتونید با استفاده از روش زیر فقط همون رکورد رو بروز کنید;
فرض کنید نام گریدتون grdAuthorTitles هست
شما چند تا تکست باکس دارید که وقتی رو هر رکورد میرید اون تکست باکس ها بافیلدهای مختلف رکورد جاریتون تو گرید پر میشه
حالا میخواهید رکورد جاریتون رو تغییر بدید
فرض کنید میخواهید این کار رو با یه Update Query انجام بدید
بعد از اینکه بروزرسانی با موفقیت انجام شد ، بیایید عکس عمل بالا رو انجام بدید ، یعنی هنگام ویرایش این تکست باکسهاتون بود که با سلول های رکورد جاریتون تو گرید پر میشد ، حالا بعد از بروزرسانی این سلولهای رکورد جاری گریدتون هست که با همون تکست باکسه پر میشه
کد زیر رو ملاحظه کنید:


Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Try
Dim cnn As New OleDbConnection(cnnstring)
Dim cmd As New OleDbCommand("update table1 set nam=@nam, famil=@famil, tahsilat=@tahsilat, sokoonat=@sokoonat, ghad=@ghad,pedar=@pedar,nomre=@nomre where id = " & CInt(TextBox7.Text), cnn)
If cnn.State = ConnectionState.Closed Then cnn.Open()
With cmd
.Parameters.Clear()
.Parameters.AddWithValue("@nam", Trim(TextBox1.Text))
.Parameters.AddWithValue("@famil", Trim(TextBox2.Text))
.Parameters.AddWithValue("@tahsilat", Trim(ComboBox1.Text))
.Parameters.AddWithValue("@sokoonat", Trim(TextBox4.Text))
.Parameters.AddWithValue("@ghad", Trim(TextBox3.Text))
.Parameters.AddWithValue("@pedar", Trim(TextBox5.Text))
.Parameters.AddWithValue("@nomre", Trim(TextBox6.Text))
.ExecuteNonQuery()
End With
cnn.Close()
MsgBox("رکورد مورد نظر بروزرسانی شد", MsgBoxStyle.Information)
loaddata()
grdAuthorTitles.CurrentRow.Cells(1).Value = TextBox1.Text
grdAuthorTitles.CurrentRow.Cells(2).Value = TextBox2.Text
grdAuthorTitles.CurrentRow.Cells(3).Value = ComboBox1.Text
grdAuthorTitles.CurrentRow.Cells(5).Value = TextBox3.Text
grdAuthorTitles.CurrentRow.Cells(4).Value = TextBox4.Text
grdAuthorTitles.CurrentRow.Cells(6).Value = TextBox5.Text
grdAuthorTitles.CurrentRow.Cells(7).Value = TextBox6.Text
grdAuthorTitles.CurrentRow.Cells(0).Value = TextBox7.Text
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Exclamation)
End Try
End Sub
با این دستور فقط و فقط همون رکورد تغییر پیدا میکنه و بس
امیدورام منظورم رو رسونده باشم
یاعلی
دوست گرامی حالا فرض کنید یه رکورد حذف یا اضافه بشه چه تکنیکی بزنیم ؟ مرسی

فرید نجفلو
پنج شنبه 03 فروردین 1391, 12:22 عصر
چرا مسئله رو زیاد پیچیده کردید
ببین swallow.pa شما وقتی رکوردها رو فراخوانی می کنید توی دیتاگرید این رکوردها هر کدومشون دارای یک موقعیت توی حافظه هستن مثلا شما گریدتون به BindingSource1 وصله خب این BindingSource1 خودش دارای یک موقعیته مثل BindingSource1.Position = 10 با این کد رکوردی که توی موقعیت 10 باشه سلکت میشه یعنی در حقیقت جستجو توی گریده
موفق باشید

یعنی الا ن شما از پیچیدگی مسئله کاستید!!!
اگه می خواستیم این کار رو بکنیم که می یومدیم از ID رکورد استفاده می کردیم و هر رکوردی که ID اون با مورد ویرایش شده برابر بود Select می کردیم
از این گذشته ممکنه کاربر نیم ساعت پیش گریدش اطلاعات رو گرفته حالا می یاد بدون رفرش یکی رو ویرایش می کنه و ما هم کل اطلاعات رو از پایگاه داده دوباره می گیریم حالا تو این نیم ساعت ممکنه کلی رکورد توسط سایر کاربران حذف و اضافه شده باشه بازم Position شما همون 10 میشه؟!

هدف اصلی ما اینه که ما اومدیم 1000 رکورد رو از دیتابیس گرفتیم حالا که می خوایم رفرش کنیم دیگه نیایم دوباره 1000 رکورد (ممکنه کمتر یا بیشتر شده باشه) رو دوباره بگیریم در حالی که 99% اطلاعات فرقی نکرده قصد ما دریافت رکورد های تغییر کرد یا حذف و اضافه شده است(که ممکنه کلا بشن 10 تا !!!)

ali190
پنج شنبه 03 فروردین 1391, 12:59 عصر
سلام
فرید جان نظرتون راجع به روش من (http://barnamenevis.org/showthread.php?333208-%D8%B3%D9%84%DA%A9%D8%AA-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%B8%D8%B1-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1468328&viewfull=1#post1468328) در خصوص ویراش داده ها چیست؟

فرید نجفلو
پنج شنبه 03 فروردین 1391, 13:51 عصر
سلام
فرید جان نظرتون راجع به روش من (http://barnamenevis.org/showthread.php?333208-%D8%B3%D9%84%DA%A9%D8%AA-%DA%A9%D8%B1%D8%AF%D9%86-%DB%8C%DA%A9-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D9%85%D9%88%D8%B1%D8%AF-%D9%86%D8%B8%D8%B1-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%DA%AF%D8%B1%DB%8C%D8%AF&p=1468328&viewfull=1#post1468328) در خصوص ویراش داده ها چیست؟

اگه می خواستید به اون روش برید چرا loaddata رو فرخوانی کردید؟ با این کا که CurrentRow شما می شه سطر اول و شما یه سطر غیر از اونی که اصلاح کردید رو تغییر می دید!!!

ثانیا جواب این چی می شه:


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

با من در نیوفت من استاد گیر دادن و ایراد گرفتنم:قهقهه:
(حی دارم واسه خودم دشمن تراشی می کنم :قهقهه:. گیر ندینا شوخی کردم:گریه:)

ali190
پنج شنبه 03 فروردین 1391, 13:55 عصر
سلام
اگر دقت کنی من در sub ام از ساختار Try Catch استفاده کردم
یعنی بعد از اینکه اطمینان حاصل کردم اطلاعات در دیتابیس نشست میام اون رکورد رو به صورت دستی به گرید اضافه میکنم
OK?

فرید نجفلو
پنج شنبه 03 فروردین 1391, 14:37 عصر
سلام
اگر دقت کنی من در sub ام از ساختار Try Catch استفاده کردم
یعنی بعد از اینکه اطمینان حاصل کردم اطلاعات در دیتابیس نشست میام اون رکورد رو به صورت دستی به گرید اضافه میکنم
OK?

مگه من گفتم اگه دیتابیس آپدیت نشد چطور می شه؟!
ما فرض می کنیم شما سطر 13 گرید رو انتخاب کردید
شما داخل Button4_Click از خط 1 تا 18 اطلاعات رو به روز می کنید تا اینجا تقریبا مشکلی نیست
اما تو خط 19 اومدین loaddata رو صدا زدید
ایراد اول:
شما دوباره کل اطلاعات رو رفرش کردید مگه نه؟!(ناقض هدف اصلی)
Select * from Table1
grdAuthorTitles.DataSource = dt

ایراد دوم :
شما یه بار رفرش کردید پس اطلاعات جدید هم دوباره بارگذاری شدن! نیزی به خطوط بعد از خط 19 نیست

ایراد سوم
وقتی خطوط بعد از 19 اجرا بشن چون شما تو خط 19 DataSource گرید رو تغییر دادید به صورت خود کار سطر انتخاب شده به سطر اول پرش می کنه
و شما اون سطر رو ویرایش میکنید در حالی که باید سطر 13 ویرایش می شد(یک باگ عظیم الجثه!!!)

به فرض شما خط 19 رو حذف کنید
جواب سوال دوم من رو هنوز ندادید

بازم اگه خواستی ایراداتی هست!:چشمک:

ali190
پنج شنبه 03 فروردین 1391, 15:12 عصر
سلام آقا فرید
loaddata یه تابع هست
من که در Sub ام اشاره ای به محتویات این تابع نکردم
شما اون تابع در خط 19 رو ندید بگیرید
بقیش درسته؟

فرید نجفلو
پنج شنبه 03 فروردین 1391, 16:24 عصر
loaddata یه تابع هست
من که در Sub ام اشاره ای به محتویات این تابع نکردم
تو کد قبلی ایشون رو معرفی کرده بودید


شما اون تابع در خط 19 رو ندید بگیرید
بقیش درسته؟

میشه گفت درسته
اما:
1-همچنان سوال دوم من بی جوابه!
2-اعتبار سنجی داده هاتون وجود نداره
3-همون چیزی رو که به دیتابیس فرستادین تو گرید وارد نمی کنید(Trim)!
4-چرا به جای یک سطر از گرید مستقیما DataSource اون(که یک DataTable است) رو ویرایش نمی کنی؟

ali190
پنج شنبه 03 فروردین 1391, 19:26 عصر
سلام
آقا فرید ممنونم از نظراتتون
میشه سئوالاتتون رو یه مقدار واضح تر بپرسید
من مثل شما حرفه ای نیستم ، خوب متوجه نشدم
ممنونم
یاعلی