PDA

View Full Version : چگونه در entity framework رکودها را به صورت تکی نمایش دهیم



bitcob589
شنبه 09 فروردین 1393, 18:10 عصر
با سلام
یک فرم دارم در زمانی که برای اولین بار فرم لود می شود از دیتابیس 5 رکود به صورت تصادفی نمایش می دهم که همه 5 رکود یکباره نمایش می دهم
چگونه می توان با کلیک بر روی دکمه موجود در فرم هر رکود به صورت جداگانه در لیبل نمایش دهم

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


public static class myExtensionMethods{
static Random rnd = new Random();
public static IEnumerable<T> RandomElements<T>(this IEnumerable<T> source, int number)
{
return source.OrderBy(r => rnd.Next()).Take(number);
}
}

public Form1() {
InitializeComponent();
showqustion();
}


private void showqustion()
{
Model1Container dddd = new Model1Container();
var randomList = dddd.qustionusers.RandomElements(5).ToList();



}

r4hgozar
شنبه 09 فروردین 1393, 20:37 عصر
به نظرم یه کوئری بنویسین و هنگام نمایش فقط اون رو نمایش بدین. البته اگه درست متوجه شده باشم.



var query = from c in db.tblname
select new { c.namefild, c.namefild2, c.namefild3 };


اینجوری می تونین فیلد مورد نظر رو نمایش بدین و این کوئری رو نمایش بدین.

bitcob589
شنبه 09 فروردین 1393, 20:50 عصر
متوجه منظورم نشدید بگذارید واضح تر توضیح دهم
کدی که در پست 1 گذاشته ام 5 رکورد به صورت تصادفی به صورت یکباره نمایش می دهد
در نظر دارم به جای اینکه 5 رکود یکباره به کاربر نشان دهم کاربر به وسیله دکمه ای که درون فرم است با هر دفعه کلیک بر روی دکمه یکی از 5 رکود تصادفی در یک لیبل مشاهده کند (ضمنا اولین رکود تصادفی می خواهم در زمانی که اولین بار فرم لود می شود به کاربر نمایش دهم )

r4hgozar
شنبه 09 فروردین 1393, 20:56 عصر
اها. خوب این رو می توین به چند روش انجام بدین.البته شاید روش کاملا استانداردی نباشه اما به نظرم عملیه.
این کد ها که اوردین و نمایش داده میشن رو حالا یا تو دیتاگرید و یا listbox و یا هر چی دیگه ذخیره کنین اما حالت ویزیبل نداشته باشه.
حالا 5 تا لیبل بسازین و فرم اول با داده اول بصورت لود صفحه نمایش داده بشه.
بقیه لیبل ها هم حالا یا با تایمر و یا دکمه دنه دونه از دیتاگرید و یا لیست باکس نمایش داده بشه. شرمنده دیگه ما همینقدر بلدیم:D

r4hgozar
شنبه 09 فروردین 1393, 20:58 عصر
اگه مشکل شما حل شد لطف کن تو فروم به سوال من اگه میشه جواب بده :D

bitcob589
شنبه 09 فروردین 1393, 21:08 عصر
در نظر دارم بار اول که فرم لود می شوداولین رکود تصادفی به من نمایش دهد و به ازای هر بار کلیک بر روی دکمه یکی از رکودهای تصادفی درون لیبل نمایش دهد

Mahmoud.Afrad
شنبه 09 فروردین 1393, 22:34 عصر
از طریق بایندیتگ میتونی.
مثال:

BindingSource bs;
public Form1()
{
InitializeComponent();

db = new Database1Entities();

BindingList<tbl> bl = new BindingList<tbl>(db.tbl.Take(5).ToList());
bs = new BindingSource();
bs.DataSource = bl;
textBox1.DataBindings.Add("Text", bs, "Name");
}



private void button1_Click(object sender, EventArgs e)
{
if (bs.Position < (bs.Count - 1))
{
bs.MoveNext();
}
else
{
bs.MoveFirst();
}
}


یا اینکه هر بار یک رکورد تصادفی از دیتابیس بگیر و نمایش بده.

bitcob589
یک شنبه 10 فروردین 1393, 19:20 عصر
چگونه می توان در کد بالا id رکود تصادفی ذخیره کرد که بتوان id ذخیره شده را در فرم دیگر استفاده نماییم

Mahmoud.Afrad
یک شنبه 10 فروردین 1393, 19:38 عصر
از طریق شئ فعلی بایندینگ سورس میتونی بدست بیاری. ارسال به فرم دیگر هم بارها بحث شده.

tbl t = bs.Current as tbl;
int a = t.id;

bitcob589
سه شنبه 12 فروردین 1393, 17:52 عصر
id به روش زیر به صفحه دیگر انتقال می دهم اما در فرم دوم هیچ id دریافت نمی کندآیا ارسال اطلاعات به فرم دیگر به روش زیر اشتباه است

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

public partial class Form1 : Form {
public static int[] s;
BindingSource bs;
public Form1()
{

InitializeComponent();
showqustion();
}


private void showqustion()
{

Model1Container dddd = new Model1Container();
BindingList<qustionuser> bl = new BindingList<qustionuser>(dddd.qustionusers.RandomElements(5).ToList());

bs = new BindingSource();
bs.DataSource = bl;

textBox1.DataBindings.Add("Text", bs, "qustion");
label1.DataBindings.Add("Text", bs, "answer1");
qustionuser t = bs.Current as qustionuser;
int[] a =new int[ t.Id];


s = a;
}

فرم دوم به صورت زیر است که تمام اطلاعات id های برگشتی در فرم زیر نمایش می دهم

public partial class Form2 : Form {
public Form2()
{
InitializeComponent();
Model1Container dddd = new Model1Container();
int[] id = Form1.s;
foreach (int yk in id)
{
var dt = dddd.qustionusers.Where(i => i.Id == yk).FirstOrDefault();
dataGridView1.DataSource = dt;


}
}
آیا روش ارسال اطلاعات اشتباه می باشد

Mahmoud.Afrad
سه شنبه 12 فروردین 1393, 18:49 عصر
بارها جواب داده شده لطفا جستجو کنید.

از اونجایی که همون شئ قراره در فرم دوم بدست بیاد اصلا نیاز به این کارها نیست. کافیه همون عنصر فعلی bs رو انتقال بدید. (نیاز نیست دوباره کوئری بزنی)
از طریق سانده میتونی انتقال بدی.(یا یک متد خودتون بنویسید و در اون متد در کنترل مناسب نمایش بدی.
در فرم اول:

BindingSource bs;
public Form1()
{
InitializeComponent();
showqustion();
}

private void showqustion()
{
Model1Container dddd = new Model1Container();
BindingList<qustionuser> bl = new BindingList<qustionuser>(dddd.qustionusers.RandomElements(5).ToList());

bs = new BindingSource();
bs.DataSource = bl;

textBox1.DataBindings.Add("Text", bs, "qustion");
label1.DataBindings.Add("Text", bs, "answer1");
}

private void button1_Click(object sender, EventArgs e)
{
qustionuser t = bs.Current as qustionuser;
Form2 frm = new Form2(t);
frm.Show();
}


در فرم دوم:

public Form2(qustionuser q)
{
InitializeComponent();

label1.Text = q.Id;
label2.Text = q.Name;
}