PDA

View Full Version : سوال: نحوه ویرایش یک فیلد PrimaryKey در یک رکورد با LINQ-بیند کردن کمبود با دوفیلد-بازیابی فیلدها در تکست



ashkan1234
پنج شنبه 02 خرداد 1392, 14:06 عصر
سلام چندتاسوال در مورد لینک دارم که تو قسمت سی شارپ مطرح کردم وکسی جواب نداد!
اولی:
چطور میشه یه فیلد که کلید اصلی جدول هم باشه(مثل کد ملی)را با استفاده از لینک ویرایش کرد؟
بنده که هرکاری کردم به فیلدم گیر میده و میگه نمیتونی ویرایش کنی!
اینهم کدهای دکمه ویرایش:var id = (int)gridDr.CurrentRow.Cells["PZK_CodeMelli"].Value;
var rowIndex = gridDr.CurrentRow.Index;
using (var db = new AshkanDataContext())
{

var DR = db.TBL_Pezeshks.Where(c => c.PZK_CodeMelli == id).FirstOrDefault();
if (DR == null) return;

DR.PZK_Name = txtDrName.Text;
DR.PZK_Family = txtDrFamily.Text;
DR.PZK_CodeMelli = Convert.ToInt32(txtDrID.Text);

db.SubmitChanges();
gridDr.DataSource = db.TBL_Pezeshks;
gridDr.Rows[rowIndex].Cells[0].Selected = true;
}
---------------------------------
دومی:
وقتی یک کمبوباکس رو به جدول بیند میکنم!
چطور میشه بجای یکی از فیلدهای جدول دو تاشونو آورد تو کمبوباکس؟
مثلا تو جدولی که نام ونام خانوادگی داریم!
میخوام نام و نام خانوادگی هر دوتاشون تو کمبو باکس بیاد!
ولی کمبو باکس چند ستونه نمیخوام!
بلکه میخوام تو همین کمبو معمولی اینجوری نمایش بده
"نام"+" "+"نام خانوادگی"
تو DisplayMember که اینکارو میکنم ،در کمبو ValueMember رو نمایش میده!
-------------------------------
سومی:
چطور میشه این روال را با دستورات LINQ عملی کرد:
یک فرمی دارم که 6تا تکست باکس داره و در SQL هم 6 فیلد دارم!+یک دکمه!
TEXTSAL
TEXTMAH
TEXTFAMILY
BTN_OK

TEXTN1
TEXTN2
TEXTN3

حالا میخوام وقتی کاربر سه تای اول رو پر کرد و دکمه OK رو زد:
اگر اطلاعات وارد شده در سه تکست باکس، در بانک موجود بود {عینا سه تکست باکس دوم را با اطلاعات آن رکورد پر کند}
اگر اطلاعات وارد شده در سه تکست باکس اول باهم مغایرت داشت {
بروی فامیلی جستجو کند،اگر برای آن شخص اطلاعات ثبت شده بود،آخرین رکورد ثبت شده آن شخص را وارد سه تکست باکس دوم کند!
اگر هم هیچ فیلدی برای شخص ثبت نشده بود مسیج باکس باز شود و اعلام کند!
کلید اصلی هم روی سه تا فیلد اوله!
-----------------------------------
یکم پیچیده است!
سعی کردم خیلی واضح توضیح بدم!
تو VB6 قبلا اینکارو کردم(البته آقای واژدی {قسمت وی بی همین سایت}زحمت کشیدن وکمک کردن)

parvizwpf
پنج شنبه 02 خرداد 1392, 17:09 عصر
اصلا نباید کد ملی کلید باشه دوست عزیز.کلید رو ویرایش نمیکنن.
2-

from x in mytable select new {namefam=x.name+x.family}

حالا به valuemember میدید namefam
3- شرمنده کار زیاد داره

ashkan1234
پنج شنبه 02 خرداد 1392, 18:20 عصر
اصلا نباید کد ملی کلید باشه دوست عزیز.کلید رو ویرایش نمیکنن.
2-

from x in mytable select new {namefam=x.name+x.family}

حالا به valuemember میدید namefam
3- شرمنده کار زیاد داره
1 -
واسه اولی چرا نباید کد ملی کلید باشه؟
معمولا اونی رو که نمیخوان تکراری ازش ثبت بشه کلید روش قرار میدن!
دلیلش رو میشه بفرمایید؟(ممنون میشم)
اگه اینجوری که شما میفرمایید پس باید یه فیلد اتونامبر در نظر بگیرم واسه کلید اصلی؟؟
2-اینجوری که فرمودید زدم ولی بازهم ValueMember رو بر میگردونه!من میخوام تو DisplayMember نام و نام خاوادگی نمایش داده بشه!البته فکر کنم شما یک کوچولو اشتباه تایپ کردیداینو

حالا به valuemember میدید namefam
فکر کنم منظورتون DisplayMember بود!
زدم نشد!!

3-راهشم بگشد حله ها میگردم پیداش میکنم(چون لینک کار کردم تو نرم افزار نمیدونم چجوری پیش برم!!!)

ashkan1234
پنج شنبه 02 خرداد 1392, 18:54 عصر
مشکل شماره 2 را حل کردم!
دوستان اگر لطف کنند در مابقی یاری کنند...

parvizwpf
پنج شنبه 02 خرداد 1392, 23:48 عصر
خب حالا بیا برو ویرایشش کن . نمیشه چرا چون اصلا کلید ویرایش نمیشه اگه بشه تمام ساختار اون بهم میریزه.
بحث سوم هم که کمی پیچیده گفتی آخه نمیدونم دقیقا کدهات چیه دیتات چیه چون به اینها بستگی داره چون یه چیز کلی میخوای نمیدونم چی جواب بدم.

ashkan1234
جمعه 03 خرداد 1392, 13:20 عصر
خب حالا بیا برو ویرایشش کن . نمیشه چرا چون اصلا کلید ویرایش نمیشه اگه بشه تمام ساختار اون بهم میریزه.
بحث سوم هم که کمی پیچیده گفتی آخه نمیدونم دقیقا کدهات چیه دیتات چیه چون به اینها بستگی داره چون یه چیز کلی میخوای نمیدونم چی جواب بدم.

چطوری ساختارش بهم میریزه؟
توی خود SQL وقتی میخوای رکورد رو ادیت کنی اگر کلید Autonumber نباشه اجازه داری که اینکارو کنی و هیچ چیز هم بهم نمیریزه!
اگر ممکنه توضیحات بیشتری بدید...
خوب حالا اگر در یک جدولی کلید اصلی جای اینکه روی یک فیلد باشه!روی سه فیلد باشه(مثل قسمت سوم سوالم)اون وقت چه اتفاقی میفته؟
یعنی کاربر اگه یکی از فیلدهای که کلید روش هست رو اشتباه وارد کرده باشه و بخواد ویرایشش کنه تکلیفش چیه؟
خیلی برام عجیبه!!
واسه سومی هم رو کاغذ پیادش میکنم و خودم حلش میکنم!
فقط یه توضیحی در مورد کلید اصلی بفرمایید که خیلی خیلی مهم شد!
اینطور که میفرمایید پس روی سه فیلد هم نباید کلید بزارم دیگه؟؟؟

ashkan1234
شنبه 04 خرداد 1392, 23:01 عصر
سلام!
هنوز گیرم...
اگه کسی میتونه راهنماییم کنه!؟؟؟؟؟؟؟؟
ADO اینجوری نبود!
این چه معنی داره که کلید اصلی قابل ویرایش نباید باشه؟
اگه اینجوریه چرا خود ماکروسافت این قابلیت رو گذاشته؟
چرا تو خود SQL میشه!
چرا خیلی از نرم افزارهای بزرگ مالی همونجوری طراحی شدن؟
چرا نرم افزارهایی که تا حالا با اون روش زدم مشکلی نداشته؟
لطفا اساتید راهنماییم کنند...
با سپاس فراوان...

mo.esmp
یک شنبه 05 خرداد 1392, 01:43 صبح
اولا هر فیلدی تو جدول که مقدارش unique بود دلیل نمیشه که به عنوان کلید اسلی در نزر گرفت بشه. مسلمن شماره ملی یک عدد یکتاست ولی ممکنه در یه مورد برای یک کاربر شماره ملی اشتباه وارد بشه و در نتیجه باید وایریش بشه که اینجاس به مشکل بر میخوری و اگه روی کلید روابت هم تعریف شده بشه که دیگه واویلاست. پس قرار دادن شماره ملی برای کلید اسلی کار درستی نیست و در آینده ممکنه کارهایی مسل index کردن و ... بخوای انجام بدی که یک کلید از نوع int و indetity هم باشه بهتر جواب میده.