PDA

View Full Version : سوال: عدم اجرای کد در رویداد لود فرم و اجرای همان کد در رویداد کلیک دکمه



forodo
سه شنبه 03 دی 1392, 11:30 صبح
سلام
کد زیر که سورت کردن یک فیلد از دیتاگرید ویو می باشد در رویداد لود فرم اجرا نمی شود ولی در رویداد دکمه اجرا می شود.
حتی رویداد کلیک دکمه رو در رویداد لود فرم فراخوانی کردم ولی بازهم اجرا نشد.
رویداد لود فرم که در توابعی که می بینید دیتاگریدها پر می شوند که خطوط سورت کننده اجرا می شود ولی تغییری در دیتاگریدویو نشان داده نمی شود:

private void frmKartabl_Load(object sender, EventArgs e)
{
this.Text = this.Text + " " + Program.chk.GetFullName(Program.Username);
tabControl1.TabPages.Remove(tabPage4);
GetIsManager();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();
//button2_Click(null, null);
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], ListSortDirection.Descending);
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], ListSortDirection.Descending);
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], ListSortDirection.Descending);
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], ListSortDirection.Descending);
}
}

رویداد کلیک دکمه که وقتی کلیک می کنم همان لحظه سورت می شود و مشکلی نیست ولی من می خوام داخل لود فرم یا بهتر بگم وقتی فرم میاد بالا خودش سورت رو انجام بده و من هیچ دکمه یا چیز دیگه ای رو نزنم:

private void button2_Click(object sender, EventArgs e)
{
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], ListSortDirection.Descending);
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], ListSortDirection.Descending);
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], ListSortDirection.Descending);
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], ListSortDirection.Descending);
}
}

sagggad
سه شنبه 03 دی 1392, 11:44 صبح
به جای فرم لود در Activated فرم قرار بده ببین باز هم مشکل داری؟؟

forodo
سه شنبه 03 دی 1392, 11:57 صبح
نه درست نشد
کدای رویداد اکتیو فرم:

private void frmKartabl_Activated(object sender, EventArgs e)
{
gridview.Rows.Clear();
gridview2.Rows.Clear();
gridview3.Rows.Clear();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();
GetNotSubmitedSadereLetter();

DataGridViewCellStyle c = new DataGridViewCellStyle();
c.BackColor = Color.Pink;
foreach (DataGridViewRow r in gridview.Rows)
if ((bool)r.Cells["IsRead"].Value == false)
r.DefaultCellStyle = c;
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], ListSortDirection.Descending);
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], ListSortDirection.Descending);
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], ListSortDirection.Descending);
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], ListSortDirection.Descending);
}
}

sagggad
سه شنبه 03 دی 1392, 12:03 عصر
شما کدهای زیر رو در FormLoad نوشتی، اما در رویداد کلیک دکمه ننوشتی؟؟

this.Text = this.Text + " " + Program.chk.GetFullName(Program.Username);
tabControl1.TabPages.Remove(tabPage4);
GetIsManager();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();

ضمنا برای اینکه متوجه اشکال بشید کدهای جانبی مثل تنظیم رنگ پس زمینه و حتی اونهایی که خیلی مهم نیستن رو پاک کنین تا هم کدها خلوت بشه و راحت تر متوجه مشکل بشید و هم شاید مثلا یک مشکلی تو یکی از اون خط ها بود!!

sagggad
سه شنبه 03 دی 1392, 12:04 عصر
ضمنا اگه میتونی در رویداد Click فرم هم این کدها رو بنویس ببین عمل میکنه؟؟

forodo
سه شنبه 03 دی 1392, 12:21 عصر
کدهای زیررو در رویدادهای زیر نوشتم:
نمی خوام تو دوتای اولی باشه و نمی خوام کاربر کاری بکنه. صفحه که باز شد خودش سورت بشه.
1- کلیک دکمه - کار می کنه
2- کلیک فرم - کار می کنه
3- لود فرم - کار نمی کنه
4- اکتیویتد فرم - کار نمی کنه

gridview.Rows.Clear();
gridview2.Rows.Clear();
gridview3.Rows.Clear();
this.Text = this.Text + " " + Program.chk.GetFullName(Program.Username);
tabControl1.TabPages.Remove(tabPage4);
GetIsManager();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();
//button2_Click(null, null);
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], ListSortDirection.Descending);
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], ListSortDirection.Descending);
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], ListSortDirection.Descending);
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], ListSortDirection.Descending);
}

sagggad
سه شنبه 03 دی 1392, 12:27 عصر
احتمالا هنگام اجرا ،گرید ویو دارای مقادیر نیست.یعنی فیلدهاش خالیه.
قبل از کدهای شرطی این کدهارو اضافه کن ببین درست میشه؟؟

dataGridView1.Rows.Add(3);
dataGridView1.Rows[0].Cells[0].Value = "dfd";
dataGridView1.Rows[1].Cells[0].Value = "dfewr";
dataGridView1.Rows[2].Cells[0].Value = "ddfsd";
dataGridView1.Rows[3].Cells[0].Value = "dff";
برای اینکه از این موضوع مطمئن بشی برای if یه Else تعریف کن و ببین else عمل میکنه؟(مثلا در else دستور بده یه کادر پیام نمایش بده)
اگر عمل کرد که یعنی همیشه وقت شروع برنامه شرط نادرسته.

forodo
سه شنبه 03 دی 1392, 12:30 عصر
این خط کد همینو می گه : اگه گریدها مقدار داشت این کار رو انجام بده.

if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], ListSortDirection.Descending);
}

در رویداد لود فرم با برک پوینت خط به خط جلو رفتم و دیدم که داخل if می شه ولی سورت روی دیتاگریدویو اعمال نمی شه.

sagggad
سه شنبه 03 دی 1392, 12:31 عصر
برای اینکه از این موضوع مطمئن بشی برای if یه Else تعریف کن و ببین else عمل میکنه؟(مثلا در else دستور بده یه کادر پیام نمایش بده)
اگر عمل کرد که یعنی همیشه وقت شروع برنامه شرط نادرسته.

sagggad
سه شنبه 03 دی 1392, 12:33 عصر
حالا نمیدونم ارتباطی داره یانه اما برای Sort مطمئن تره که به جای این:

ListSortDirection.Descending
از این استفاده کنی:

System.ComponentModel.ListSortDirection.Ascending

forodo
سه شنبه 03 دی 1392, 12:45 عصر
تو رویداد لود فرمه!!!!!!
این تن بمیره ببین مسیج باکس رو کجا گذاشتم!!!!!!!!!!!!!
مسیج باکس کار می کنه ولی کدای شما که قبلشه و کدای سورت خودم البته با تغییری که شما گفتید کار نمی کنه!!!!!!!!!!!!!!!!!
فکر کنم نیروهای شیطانی و اجنه دستی تو این کار دارند!!!!!!!!

this.Text = this.Text + " " + Program.chk.GetFullName(Program.Username);
tabControl1.TabPages.Remove(tabPage4);
GetIsManager();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();
gridview.Rows.Add(3);
gridview.Rows[0].Cells[0].Value = "dfd";
gridview.Rows[1].Cells[0].Value = "dfewr";
gridview.Rows[2].Cells[0].Value = "ddfsd";
gridview.Rows[3].Cells[0].Value = "dff";
MessageBox.Show("Test");
//button2_Click(null, null);
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], System.ComponentModel.ListSortDirection.Descending );
}

sagggad
سه شنبه 03 دی 1392, 12:58 عصر
نه مسیج باکس رو که اونجا نباید بذاری باید در else شرط if بذاری دوست من.
ببین داداش تو کدهای زیر رو که اول کدهات هست رو پاک کن:

this.Text = this.Text + " " + Program.chk.GetFullName(Program.Username);
tabControl1.TabPages.Remove(tabPage4);
GetIsManager();
getLettersKartablJari();
GetLettersKartablErjaha();
GetLettersKartablsuspend();

یعنی در لودفرم فقط کدهای زیر باشه:

gridview.Rows.Add(3);
gridview.Rows[0].Cells[0].Value = "dfd";
gridview.Rows[1].Cells[0].Value = "dfewr";
gridview.Rows[2].Cells[0].Value = "ddfsd";
gridview.Rows[3].Cells[0].Value = "dff";
MessageBox.Show("Test");
//button2_Click(null, null);
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], System.ComponentModel.ListSortDirection.Descending );
}
else
MessageBox.Show("SSS");
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], System.ComponentModel.ListSortDirection.Descending );
}
else
MessageBox.Show("SSS");
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], System.ComponentModel.ListSortDirection.Descending );
}
else
MessageBox.Show("SSS");
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], System.ComponentModel.ListSortDirection.Descending );
}
else
MessageBox.Show("SSS");


چون من با این کدها کار کردم قشنگ هم عمل کرد:متعجب:

forodo
سه شنبه 03 دی 1392, 13:45 عصر
ممنون از راهنماییهاتون.
فهمیدم مشکل از کجا بود.
اینو همیشه به خودم می گم اگر برنامه ویژوال کار غیرمنطقی انجام می ده مشکل از خود منه، باید ببینم چی رو کجا نوشتم و ....
اینجا هم توی رویداد تب کنترول دیتاگریدویو پر می شد و سورت به هم می ریخت.
کدهای سورت رو اونجا هم گذاشتم و توی لود فرم هم هست و حالا درست شد.

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == 0)
{
gridview.Rows.Clear();
getLettersKartablJari();
}
else if (tabControl1.SelectedIndex == 1)
{
gridview2.Rows.Clear();
GetLettersKartablErjaha();
}
else if (tabControl1.SelectedIndex == 2)
{
gridview3.Rows.Clear();
GetLettersKartablsuspend();
}
else if (tabControl1.SelectedIndex == 3)
{
try
{
gridview4.Rows.Clear();
GetNotSubmitedSadereLetter();
}
catch (Exception)
{


}
}
if (gridview.Rows.Count > 0)
{
gridview.Sort(gridview.Columns["senddate"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview2.Rows.Count > 0)
{
gridview2.Sort(gridview2.Columns["SendDate2"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview3.Rows.Count > 0)
{
gridview3.Sort(gridview3.Columns["senddate3"], System.ComponentModel.ListSortDirection.Descending );
}
if (gridview4.Rows.Count > 0)
{
gridview4.Sort(gridview4.Columns["SendDate"], System.ComponentModel.ListSortDirection.Descending );
}
}