PDA

View Full Version : حرکت بین رکوردهای جدول



boysfe5
یک شنبه 21 آبان 1391, 14:12 عصر
سلام
با جستجوی شماره دانشجو و بایند کردن اطلاعات وبرای حرکت بین رکوردهای جدول دانشجو دو تا button قراردادم << بعدی و >> قبلی میخوام وقتی که بر روی button کلیک کردم جلو و عقب برم

94754

private void Binding()
{
txtsname.DataBindings.Clear();
txtsfamily.DataBindings.Clear();
txtsid.DataBindings.Clear();
txtsfather.DataBindings.Clear();
mashkedbirths.DataBindings.Clear();
txtsrshte.DataBindings.Clear();
label9.DataBindings.Clear();

txtsname.DataBindings.Add("Text",dv,"sname");
txtsfamily.DataBindings.Add("Text",dv,"sfamily");
txtsid.DataBindings.Add("Text",dv,"sid");
txtsfather.DataBindings.Add("Text",dv,"sfather");
mashkedbirths.DataBindings.Add("Text",dv,"sbirths");
txtsrshte.DataBindings.Add("Text",dv,"srshte");
label9.DataBindings.Add("Text",dv,"ssex");

}
private void button3_Click(object sender, EventArgs e)
{
da = new SqlDataAdapter("select * from student",con);
DataSet ds = new DataSet();
da.Fill(ds,"t1");
dv = new DataView(ds.Tables["t1"]);
cum=(CurrencyManager)BindingContext[dv];

int intfind;

dv.Sort = "scode";
intfind = dv.Find(int.Parse(txtscode.Text));

if (intfind == -1)
{
MessageBox.Show("موجود نیست");
}

if (intfind != -1)
{
Binding();
cum.Position = intfind;

}

}

sgh_programer
یک شنبه 21 آبان 1391, 14:24 عصر
سلام
یعنی با کلیک روی دکمه بعدی و قبلی اطلاعات فرد دیگه ای رو نشون بده؟

boysfe5
یک شنبه 21 آبان 1391, 14:27 عصر
آره میخوام بعد از جستجو جلو و عقب بره

sgh_programer
یک شنبه 21 آبان 1391, 15:25 عصر
من یه راه برای این کار سراغ دارم (البته ممکنه بهینه نباشه)
شما باید یه فیلد توی بانک تعریف کنی مثل فیلد ردیف(Radif) ازنوع int و به صورت خودکار شماره گذاری شود(identity)
و وقتی که برای بار اول اطلاعات جدول student را لود کردی این مقدار درون یه متغیر قرار بگیره فرض کن متغیر m
و بعد برای دکمه بعدی>> کد های زیر را بنویس
m=m+1;
da = new SqlDataAdapter("select * from student where Radif='"+m+"'",con);
DataSet ds = new DataSet();
da.Fill(ds,"t1");
dv = new DataView(ds.Tables["t1"]);
cum=(CurrencyManager)BindingContext[dv];

int intfind;

dv.Sort = "scode";
intfind = dv.Find(int.Parse(txtscode.Text));

if (intfind == -1)
{
MessageBox.Show("موجود نیست");
}

if (intfind != -1)
{
Binding();
cum.Position = intfind;

}

و برای دکمه قبلی<< هم همین دستورات را بنویس فقط به جای m+1 یکی از m کم کن(m-1)

باز هم تاکید میکنم شاید این الگوریتم بهینه نباشه
این بود چیزی که من به ذهنم رسید

موفق باشی

boysfe5
یک شنبه 21 آبان 1391, 16:07 عصر
برای حرکت به جلو من از این دستور استفاده کردم ولی فقط یه رکورد به جلو و عقب میره
دنبال راه بهتری هستم
SqlDataAdapter daa = new SqlDataAdapter("select * from student", con);
DataSet dss = new DataSet();
daa.Fill(dss, "t1");
dv = new DataView(dss.Tables["t1"]);
cum = (CurrencyManager)BindingContext[dv];
cum.Position++;

sgh_programer
یک شنبه 21 آبان 1391, 16:19 عصر
یعنی این که از کد هایی که من فرستادم استفاده کردی و فقط یه رکورد جلو میرفت!!!!!!!!!!!!!!!!!!!!!!!!

شما باید توی فرمت متغیر M را به این صورت تعریف کنی
public static int M = 0;


SqlDataAdapter daa = new SqlDataAdapter("select * from student", con);
DataSet dss = new DataSet();
daa.Fill(dss, "t1");
dv = new DataView(dss.Tables["t1"]);
cum = (CurrencyManager)BindingContext[dv];
cum.Position++;

واز این دستور استفاده کن


M=M+1;
da = new SqlDataAdapter("select * from student where Radif='"+M+"'",con);

boysfe5
یک شنبه 21 آبان 1391, 16:29 عصر
یعنی این که از کد هایی که من فرستادم استفاده کردی و فقط یه رکورد جلو میرفت!!!!!!!!!!!!!!!!!!!!!!!!

شما باید توی فرمت متغیر M را به این صورت تعریف کنی
public static int M = 0;

واز این دستور استفاده کن


M=M+1;
da = new SqlDataAdapter("select * from student where Radif='"+M+"'",con);

همون که کد قرار دادم از اون استفاده میکنم فقط یه رکورد به جلو یا عقب میره و همون کدی که قراردادی استفاده نکردم چون نمیخوام ردیفی رو به دیتابیس اضافه کنم

matin.soft
یک شنبه 21 آبان 1391, 17:15 عصر
شما می تونید از binding source.moveLast()و bindingSource.MoveNext() استفاده نمایید یا از کنترل bindingNavigator استفاده کنید.