PDA

View Full Version : سوال: انتقال اطلاعات از دیتابیس به تکس باکس ها در Entity Framework



m.bibjan
سه شنبه 24 دی 1392, 17:28 عصر
سلام میخواستم ببینم در Entity Framework چجوری میشه بدون گرید ویو یا لیست ویو مستقیم رکورد ها رو از دیتابیس به تکس باکس ها بریزم و همون جا حذف یا ادیتشون کنم
در ضمن من مشکلی با ذخیره اطلاعات ندارم
ممنون میشم کمکم کنید یا ارجاع بدین چون زیاد سرچ زدم

Mansoor92
سه شنبه 24 دی 1392, 17:35 عصر
سلام
فک کنم باید یک شرط براش بذارید و اون رو به این ترتیب داخل تکسباکس نمایش بدید


var q = db.tbl_PooL.Where(c => c.NameR == lbl_text1.Text).Single();
textbox1.text = q.NameR;
textbox2.text = q.NameUser;

m.bibjan
سه شنبه 24 دی 1392, 23:07 عصر
سلام
ممنون
کد شما رو نوشتم درست شد و اطلاعات رو از دیتابیس به تکس باکس ها میریزه

حالا فقط اگه لطف کنید واسه ذخیره و حذف کردنش هم کمکم کنید ممنون میشم

goldoon
چهارشنبه 25 دی 1392, 06:48 صبح
برا ذخیره ش خب باید دقیقا برعکس این کار را انجام بدی البته توی linq
var q = db.tbl_PooL.Where(c => c.NameR == lbl_text1.Text).Single();
q.NameR= textbox1.text;

q.NameUser= textbox2.text;
db.submitchange();

m.bibjan
چهارشنبه 25 دی 1392, 07:05 صبح
سلام خیلی ببخشید انگار اشتباه نوشتم
شرمنده
اطلاعات رو از دیتابیس به تکس باکسها میریزم
حالا میخوام توی همون تکس باکس عمل ویرایش رو انجام بدم
و طبق کلید اصلی که طبق همون هم عملیات جستجو رو هم انجام میدم حذفشون کنم
مشکلم فقط همین دوتا هستش
ممنون اگه کمکم کنید

goldoon
چهارشنبه 25 دی 1392, 08:14 صبح
شما با دستورات حذف و ویرایش در ارتباط با پایگاه داده مشکل دارین؟
منظورتون اینه کد حذف یک رکورد از ذیتابیس را لازم دارین؟با linq؟
.
اگه این دستورات را می خاین من طبق این کدی که دوستمون از روش مثال زدند جواب میدم اگه منظورتون چیزی دیگه س بگید

tbl_PooL q = db.tbl_PooL.Where(c => c.NameR == lbl_text1.Text).Single();
db.tbl_PooL.deleteonsubmite(q);
db.submitchange();

m.bibjan
چهارشنبه 25 دی 1392, 15:32 عصر
سلام واسه ادیتش چطوری باید شرط رو اجرا کنم
با توجه به از توی تکس باکس ها میخوام عمل ویرایش رو انجام بدم

m.bibjan
چهارشنبه 25 دی 1392, 16:00 عصر
کد شما رو حذف نوشتم ارورش این بود
The object cannot be deleted because it was not found in the ObjectStateManager

Mansoor92
چهارشنبه 25 دی 1392, 17:22 عصر
کد شما رو حذف نوشتم ارورش این بود
The object cannot be deleted because it was not found in the ObjectStateManager

برای حذف از این روش استفاده کنید


tbl_PooL table = db.tbl_PooL.First(c => c.Id == a);
db.tbl_PooL.Remove(table);
db.SaveChanges();


دیگه اون شرطی که داخل عبارت First مینویسید بستگی به خودتون داره

m.bibjan
چهارشنبه 25 دی 1392, 17:39 عصر
سلام
ممنونم از دوستان
واسه ادیتش چطوری باید شرط رو اجرا کنم
با توجه به از توی تکس باکس ها میخوام عمل ویرایش رو انجام بدم
راستی این دستور و این نحوه کد نویسی رو کجا میتونم مفصلش رو پیدا کنم . جدیده واسم
با دستورات ADO آشنا هستم خوب
ولی این نحوه کد نویسی واسه Entity Framework هستش؟

aghayex
چهارشنبه 25 دی 1392, 18:13 عصر
شما یه شی سراسری از نوع اون تیبل در فرم می سازی و هر موقع که اطلاعاتی از دیتابیس گرفتی می ریزی تو اون شی و به هر طریقی که خواستی ویرایشش می کنی ( چه تکس باس یا چه در کد نویسی ) بعد از اون فقط در دکمه دستور savechang() . خود ef این تغییرات رو تشخیص می ده و برای اون رکورد مورد نظر اعمال می کنه

m.bibjan
چهارشنبه 25 دی 1392, 18:45 عصر
سلام یعنی دقیقا کدش به چطوری میشه؟

aghayex
چهارشنبه 25 دی 1392, 19:36 عصر
مدت زیادی هست که سی شارپ کار نکردم احتمالا از لحاظ لغوی مشکلی پیش بیاد .

public class form1
{
private dbcontext db;
private table1 currentrecord{get;set;}
public form1()
{
db=new dbcontext();
currentrecord=table1();
}
private void search()
{
currentrecord=db.table1s.firstordefult(o=>o.name="ali")
if(currentrecord!=null)
{
name.text=currentrecord.name;
.
.
.
}
private void save()
{
db.savechang();
}
}
}
}

m.bibjan
چهارشنبه 25 دی 1392, 22:26 عصر
از کدتون نتونستم استفاده کنم نبخاطر اشکال های لغوی
چون کدهای حذف و و ذخیره و جستجو با کد شما فرق داره
من فقط میخوام ببینم در این کد قسمت قرمز رنگ رو چی باید بنویسم
tbl_PooL table = db.tbl_PooL.First(c => c.Id == a);
db.tbl_PooL.Remove(table);
db.SaveChanges();

البته با توجه اینکه میخوام از توی تکی باکس ویرایش رو انجام بدم

aghayex
چهارشنبه 25 دی 1392, 23:15 عصر
در این کد شما میاید یه رکورد رو حذف می کنید

m.bibjan
چهارشنبه 25 دی 1392, 23:21 عصر
ممنون از توضیحتون
منظورم اینه که باید واسه ادیت رکورد های توی تکس باکس ها
در کد بالا بجای Remove
چه چیزی باید نوشت که ویرایش کنه و تغییرات رو ذخیره کنه .

m.bibjan
پنج شنبه 26 دی 1392, 14:40 عصر
سلام شما این متغییر a رو کجا تعریفش کردین ؟ و چطوری ؟

aghayex
پنج شنبه 26 دی 1392, 15:43 عصر
کدی که متغیر a در اون هست مربوط به خدتونه !:متفکر:
نگاه کنید در ef ما به دو صورت کار می کنیم :
1 ) روش متصل ) این همون روشی هست که من استفاده کردم یعنی یک شی به صورت عمومی تعریف می کنی و بعد مقدار دهیش می کنی که در این روش ef خودش تغییرات رو دنبال می کنه
2 ) روش غیر متصل ) در این روش شما متغیر عمومی استفاده نمی کنی و در یه دکمه یه رکورد رو از دیتابیس می گیری و به تکس باکس هات می دی و وقتی که خواستی در دیتابیس ذخیره کنی به وسیله دستوراتی مثل find و Atach ابتدا رکوردی که تغیر دادی رو به ef معرفی می کنی و در نهایت دستور savechang() رو اجرا می کنی .

m.bibjan
پنج شنبه 26 دی 1392, 23:15 عصر
سلام ممنون
این نحوه کد نویسی بهتره یا روش متصل شما ؟ از لحاظ سرعت کار با دیتابیس ؟ چرا ؟
توی این کد من از گرید ویو استفاده کردم حالا میخوام از تکس باکس ها استفاده کنم واسه خروجی سرچ و بقیه عملیات( یعنی انتقال اطلاعات به تکس باکس ها )

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinformEntity
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();


}
userdbEntities database = new userdbEntities();
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = database.usertbs.ToList();
}

private void btnNew_Click(object sender, EventArgs e)
{
usertb table =new usertb
{
table.name = txtname.Text,
table.family = txtfamily.Text,
table.idpublic = txtidpublic

};
database.usertbs.AddObject(table);
database.SaveChanges();
dataGridView1.DataSource = database.usertbs.ToList();

}

private void btnedit_Click(object sender, EventArgs e)
{
usertb table = new usertb();
int m = int.Parse(dataGridView1.CurrentRow.Cells[2].Value.ToString());
usertb udb = database.usertbs.First(a => a.idpublic == m);
table.name = txtname.Text;
table.family = txtfamily.Text;
table.idpublic = txtidpublic;
database.SaveChanges();
dataGridView1.DataSource = database.usertbs.ToList();


}

private void btnDelete_Click(object sender, EventArgs e)
{
usertb table = new usertb();
int m = int.Parse(dataGridView1.CurrentRow.Cells[2].Value.ToString());
usertb udb = database.usertbs.First(a => a.idpublic == m);
table.name = txtname.Text;
table.family = txtfamily.Text;
table.idpublic = txtidpublic;
database.usertbs.DeleteObject(table);
database.SaveChanges();
dataGridView1.DataSource = database.usertbs.ToList();
}

private void btnsearch_Click(object sender, EventArgs e)
{
var mSearch = database.usertbs.Where(a=>a.idpublic.Contains(txtsearch.Text());
dataGridView1.DataSource=mSearch.ToList();
}
}
}

m.bibjan
جمعه 27 دی 1392, 15:26 عصر
این نحوه کد نویسی بهتره یا روش متصل شما ؟ از لحاظ سرعت کار با دیتابیس ؟ چرا ؟
توی این کد من از گرید ویو استفاده کردم حالا میخوام از تکس باکس ها استفاده کنم واسه خروجی سرچ و بقیه عملیات( یعنی انتقال اطلاعات به تکس باکس ها )
کسی نیست جواب بده؟

Mahmoud.Afrad
شنبه 28 دی 1392, 02:18 صبح
بهتره جستجو کنید تا از پرسش سوال تکراری پرهیز بشه.

برای حذف میتونی شئ udb رو ارسال کنی:

int m = int.Parse(dataGridView1.CurrentRow.Cells[2].Value.ToString());
usertb udb = database.usertbs.Single(a => a.idpublic == m);
database.usertbs.DeleteObject(udb);
database.SaveChanges();
dataGridView1.DataSource = database.usertbs.ToList();

m.bibjan
شنبه 28 دی 1392, 02:43 صبح
ممنون
ولی من عمل ویرایش و حذف رو از توی تکس باکسها میخوام انجام بدم
نه گرید ویو
توی گرید ویو مشکلی ندارم
بدون گرید ویو و با تکس باکس ها میخوام این کار رو انجامش بدم
بازم ممنون