PDA

View Full Version : انتخاب سطری که به datagridview اضافه میشود



zahra1372
چهارشنبه 18 دی 1392, 18:52 عصر
سلام کسی میتونه بگه چیکار کنم که بعد از اضافه کردن یه سطر جدید همون سطر اضافه شده رو انتخاب کنه؟

private void btnAdd_Click(objectsender , EventArgs e) //Add
{
if (txtAgentID.Text.Trim().Length == 0 || txtAgentName.Text.Trim().Length == 0)
{
MessageBox.Show(".اطلاعاتموردنیازواردنشدها ت", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtAgentID.Focus();
return;
}
var db = new LINQDataContext();
sptblAgentSearchAgentIDResult[] FindAgentID = db.sptblAgentSearchAgentID(Convert.ToInt32(txtAgen tID.Text.Trim())).ToArray();
if (FindAgentID.Count() > 0)
{
MessageBox.Show(".کدمأمورواردشدهتکراریاست" + "\n" + ".لطفاًیککدمآمورمنحصربهفرد اردکنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtAgentID.Focus();
txtAgentID.SelectAll();
return;
}
db.sptblAgentInsert(Convert.ToInt32(txtAgentID.Tex t.Trim()), txtAgentName.Text.Trim());
dgvAgent.DataSource = db.sptblAgentSelectAll();
txtAgentID.Text = "";
txtAgentName.Text = "";
txtAgentID.Focus();
}


ممنون میشم راهنماییم کنین.:لبخندساده:

amir200h
چهارشنبه 18 دی 1392, 19:08 عصر
خاصیت AllowUserToAddRow رو false کن.
این کد هم آخرین خونه دیتاگرید رو انتخاب میکنه
dataGridView1.ClearSelection();
dataGridView1.Rows[dataGridView1.Rows.Count-1].Selected = true;
dataGridView1.Rows[dataGridView1.Rows.Count-1].Cells[0].Selected = true;

zahra1372
چهارشنبه 18 دی 1392, 19:12 عصر
خب من توی فرم لود اینو نوشتم...:متفکر:

dgvAgent.DataSource = db.tblAgents;

چراااااااا نمیاااااااد؟؟:عصبانی++:

zahra1372
چهارشنبه 18 دی 1392, 19:19 عصر
خاصیت AllowUserToAddRow رو false کن.
این کد هم آخرین خونه دیتاگرید رو انتخاب میکنه
dataGridView1.ClearSelection();
dataGridView1.Rows[dataGridView1.Rows.Count-1].Selected = true;
dataGridView1.Rows[dataGridView1.Rows.Count-1].Cells[0].Selected = true;

AllowUserToAddRow رو قبلا false کرده بودم!!! چه ربطی داره؟
نه مسئله اینجاست که سطری که اضافه میشه حتما آخرین سطر نیست میتونه اون وسط مسطا باشه.
ایدنتیتی نیست که.
اینم عکس فرمم!!!
http://s5.picofile.com/file/8107951292/Akse_formam.jpg

amir200h
چهارشنبه 18 دی 1392, 19:31 عصر
یعنی شما هر سطری که انتخاب میکنین وسط دیتاگرید اضافه میکنین؟؟ جالبه!!!!
معمولا هرچی اضافه میشه به آخر دیتاگرید اضافه میشه
ایدنتیتی نیست که.!!!!!! چه ربطی به اضافه کردن به دیتاگرید داشت؟؟؟؟

zahra1372
چهارشنبه 18 دی 1392, 19:41 عصر
اَی بابا...
بابا من میخام مثلاً اگه مریم و کد 3 رو اضافه کردم٬ همون سطر رو انتخاب کنه. در صورتی که الان با این کدا سطر اولو انتخاب میکنه.
خب ایدنتیتی از کوچیک به بزرگه دیگه چیزی که اضافه میشه همیشه کدش بزرگتره پس میره آخر. بیخیال:عصبانی++:

به قول استادمون کاربر بز است!
کاراش که معلوم نیست یه موقع از کوچیک به بزرگ و به ترتیب وارد نکرد کد مأمورارو.

amir200h
چهارشنبه 18 دی 1392, 19:45 عصر
:لبخند: خوب خواهر من وقتی شما سطری اضافه می کنین به آخر دیتاگرید میره خوب. پس خونه آخر باید انتخاب بشه. چرا مقاومت میکنی خو :لبخند:
ایدنتیتی هم یه صفته که به فیلدت تو دیتابیس میدی. هیچ ربطی هم به دیتاگرید نداره :بامزه:

zahra1372
چهارشنبه 18 دی 1392, 19:54 عصر
میدونم ایدنتیتی چیه.:بامزه: گفتم که بیخیال.

خب وقتی مثلاًبه ترتیب
کد 1 و مریم
کد 3 و اقدس
کد 2 و سکینه
رو وارد کنه٬ اگه قرار باشه آخرین سطرو انتخاب کنه٬ بعد از وارد کردن "کد 2 و سکینه" ٬ "کد 3 و اقدس" رو انتخاب میکنه.

اوکی؟؟؟؟:گریه:
فیلدا بر اساس کلید مرتبه دیگه.:گریه::گریه:

amir200h
چهارشنبه 18 دی 1392, 20:03 عصر
با فرض اینکه:
تکست باکس کد مامور: textBox1
تکست باکس نام مامور: textBox2
نام دیتاگرید: dataGridView1
باشه.
کد زیر رو قرار بدید در دکمه ثبت
string[] a = { textBox1.Text, textBox2.Text };
dataGridView1.Rows.Add(a);
dataGridView1.ClearSelection();
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Selected = true;
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Selected = true;

zahra1372
چهارشنبه 18 دی 1392, 20:18 عصر
موقع اجرا این ارورو میده:
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data-bound.
بعدشم استادمون گفته حتما با استورپروسیجر اضافه (و...) کنین.:ناراحت:

amir200h
چهارشنبه 18 دی 1392, 20:22 عصر
واسه اینه که به بانکت وصله دیتاگریدت. اختمالا یه سلکت قبلش زدی یا اینکه مستقیم به بانکت وصله
باید قطعش کنی این ارتباطو

zahra1372
چهارشنبه 18 دی 1392, 20:37 عصر
جونم؟؟؟؟؟؟!! چطوری؟!!!!!!!!!!!!!!
(من از ADO استفاده نمیکنما. همینطوری گفتم در جریان باشی!!!!!)
http://s5.picofile.com/file/8107963026/Akse_formamm.jpg
و همچنان مشکل پا بر جاست...:گریه:

amir200h
چهارشنبه 18 دی 1392, 20:49 عصر
اااا عمو تو هنوز اینجایی :لبحند: فکر کردم مشکلت حل شده
اینو امتحان کن
DataTable dt = (DataTable)dataGridView1.DataSource;
dt.Rows.Add();
dt.Rows[dt.Rows.Count - 1][0] = textBox1.Text;
dt.Rows[dt.Rows.Count - 1][1] = textBox2.Text;
dataGridView1.DataSource=dt;
dataGridView1.ClearSelection();
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Selected = true;
dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Selected = true;

zahra1372
چهارشنبه 18 دی 1392, 21:00 عصر
باشه عمو٬ امتحان میکنم ولی گفتم که با استورپروسیجر باید اضافه کنم.:گریه:

ALTER PROCEDURE sptblAgentInsert
@AgentIDint,
@AgentNamenvarchar(50)
AS insert into tblAgent values(@AgentID,@AgentName) RETURN

امتحان کردم. این ارورو میده:ناراحت:
Unable to cast object of type 'System.Data.Linq.Table`1[Project.tblAgent]' to type 'System.Data.DataTable'.

amir200h
چهارشنبه 18 دی 1392, 21:15 عصر
این using رو اضافه کن
using system.data;

zahra1372
چهارشنبه 18 دی 1392, 21:21 عصر
این using رو اضافه کن
using system.data;

اینو داشت خودش.

zahra1372
چهارشنبه 18 دی 1392, 21:23 عصر
من در واقع میخام index سطری که اضافه میکنم رو بدست بیارم ولی نمیدونم چطوری.
(با توجه به اون کدی که اول همه گذاشتم.)

amir200h
چهارشنبه 18 دی 1392, 21:25 عصر
دیگه نمیدونم. دیگه به خودت میسپارمش.
موفق باشی

amir200h
چهارشنبه 18 دی 1392, 21:38 عصر
من در واقع میخام index سطری که اضافه میکنم رو بدست بیارم ولی نمیدونم چطوری.
(با توجه به اون کدی که اول همه گذاشتم.)

dataGridView1.Rows[dataGridView1.Rows.Count - 1]

ّIrScholer
سه شنبه 30 دی 1393, 11:49 صبح
من در واقع میخام index سطری که اضافه میکنم رو بدست بیارم ولی نمیدونم چطوری.
(با توجه به اون کدی که اول همه گذاشتم.)
int RowIndex=dt.Rows.Add();
این به شما ایندکس سطری رو که اضافه کردین میده، ولی در کل نیازی نیست که شما دوباره کاری کنید و یه بار به DataTable تبدیل کنید و بعد دوباره اونو بریزید تو گرید، از همون گرید میتونید استفاده کنید...