PDA

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



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

Sirwan Afifi
سه شنبه 01 فروردین 1391, 21:53 عصر
خوب بعد از تائید کاربر (ویرایش) با ID رکورد ویرایش شده Select بزن

swallow.pa
سه شنبه 01 فروردین 1391, 22:30 عصر
خب اگه این سلکت رو بزنم که توی گرید 20 تا رکورده میشه یکی که همون رکورد اصلاح شده است به نظر شما یه جوری نیست؟؟!!

حالا اصلا یه سوال دیگه اگه توی دیتا گرید 1000 رکورد باشه که ستونهاش شامل نام - نام خانوادگی و کد هستند بخواهیم توی دیتاگرید جستجو کنیم یک کدی که برابر باشه با 200
دقت کنید این مهمه که اگه کدی رو پیدا کرد که برابر با 200 باشه اون رکورد رو نشون بده یا انتخاب کنه نه این که فقط اون رکوردی رو نشون بده که کدش 200 باشه
یعنی همون 1000 رکورد هست ولی دیتاگرید اومده رکوردی که کد 200 رو داره برامون نشون می دهد یا انتخاب می کند

Sirwan Afifi
سه شنبه 01 فروردین 1391, 22:38 عصر
منظورتون رو متوجه نمی شم بیشتر توضیح بدید.
مگه کد شما Uniqe نیست؟

omid_csh
سه شنبه 01 فروردین 1391, 22:40 عصر
سلام
برای اینکه رکورد مربوطه رو نشون بدی باید خصوصیت FirstDisplayedScrollingRowIndex دیتا گرید ویو رو ست کنی
بجای index هم، index اون رکورد رو قرار بده، اینم یادت باشه که index از صفر شروع میشه

myDataGridView.FirstDisplayedScrollingRowIndex = index;

موفق باشی

swallow.pa
چهارشنبه 02 فروردین 1391, 11:16 صبح
سلام
برای اینکه رکورد مربوطه رو نشون بدی باید خصوصیت FirstDisplayedScrollingRowIndex دیتا گرید ویو رو ست کنی
بجای index هم، index اون رکورد رو قرار بده، اینم یادت باشه که index از صفر شروع میشه

myDataGridView.FirstDisplayedScrollingRowIndex = index;

موفق باشی
دوست من متوجه نمی شم میشه توضیح کوچیک بدی
ممنون

ali190
چهارشنبه 02 فروردین 1391, 11:56 صبح
سلام
من خودم با این قضیه مشکل دارم ، چون بعد از ایجاد تغییر در یک رکورد مجبورم کل گریدم رو رفرش کنم و اون رو دوباره با اطلاعات پر کنم
این کار در حجم بالای رکورد بسیار پرهزینه هست
متاسفانه در بسیاری از آموزشهای موجود در این تالار هم از این روش استفاده شده ، مثلاً با 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

با این دستور فقط و فقط همون رکورد تغییر پیدا میکنه و بس
امیدورام منظورم رو رسونده باشم
یاعلی

swallow.pa
چهارشنبه 02 فروردین 1391, 12:11 عصر
میشه یه مثال در رابطه با



myDataGridView.FirstDisplayedScrollingRowIndex = index;

بزنید ممنون

omid_csh
چهارشنبه 02 فروردین 1391, 15:02 عصر
میشه یه مثال در رابطه با



myDataGridView.FirstDisplayedScrollingRowIndex = index;

بزنید ممنون

مثلا میتونی بعد از بایند کردن داده ها به دیتا گرید از این خاصیت استفاده کنی
private void Form1_Load(object sender, EventArgs e)
{
myDataGridView.DataSource = dt;
myDataGridView.FirstDisplayedScrollingRowIndex = myDataGridView.Rows.Count - 1;
}
تو این مثال دیتا گرید ویو به آخرین سطر اسکرول میخوره.

حالا تو باید بجای myDataGridView.Rows.Count - 1 شماره سطر رو قرار بدی که اون سطر، اولین سطری باشه که توی دیتاگریدویو نمایش داده میشه
موفق باشی