PDA

View Full Version : سوال: مشکل در فراخوانی یک فیلد از دیتاگریدویو



forodo
جمعه 22 آذر 1392, 21:12 عصر
سلام
با کد زیر دیتاگریدویوی من پر میشه:

private void GetLettersKartablErjaha()
{
try
{

SqlConnection objconnection =
new SqlConnection("Data Source=.;Initial Catalog=Radman;" +
" User ID=sa;Password=***");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet objDataSet = new DataSet();

objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objconnection;

string cmd = @"SELECT tblErsali.ID AS EID,tblDaryafti.ID AS DID,tblErsali.LetterID,ReceiverUserName,Subject
,tabaghe,jahat,mohlat,Dayes,SendDate,Sendtime,bazg asht,peyrov

FROM tblErsali INNER JOIN tblDaryafti ON tblErsali.ID=tblDaryafti.LetterID
WHERE SenderUserName='" + Program.Username + "' AND Archived=0 AND Suspend=0 AND IsFonosht=0";
objDataAdapter.SelectCommand.CommandText = cmd;


objDataAdapter.SelectCommand.CommandType = CommandType.Text;

objconnection.Open();
objDataAdapter.Fill(objDataSet, "tblLetter");
objconnection.Close();

int i = 0;
foreach (DataRow r in objDataSet.Tables["tblLetter"].Rows)
{
gridview2.Rows.Add();
gridview2.Rows[i].Cells["ID2"].Value = r["DID"].ToString();
if (r["LetterID"].ToString() == "")
gridview2.Rows[i].Cells["LetterID2"].Value = r["EID"].ToString();
else
gridview2.Rows[i].Cells["LetterID2"].Value = r["LetterID"].ToString();

gridview2.Rows[i].Cells["Subject2"].Value = r["Subject"].ToString();
gridview2.Rows[i].Cells["Girande2"].Value = Program.chk.GetFullName(r["ReceiverUserName"].ToString());
gridview2.Rows[i].Cells["type2"].Value = r["tabaghe"].ToString();
gridview2.Rows[i].Cells["jahat2"].Value = r["jahat"].ToString();
gridview2.Rows[i].Cells["mohlat2"].Value = r["mohlat"].ToString() + " " + r["Dayes"].ToString();
// gridview2.Rows[i].Cells["Day2"].Value = r["Day"].ToString();
gridview2.Rows[i].Cells["senddate2"].Value = r["SendDate"].ToString();
gridview2.Rows[i].Cells["sendtime2"].Value = r["Sendtime"].ToString();
gridview2.Rows[i].Cells["bazgasht2"].Value = r["bazgasht"].ToString();
gridview2.Rows[i].Cells["peyrov2"].Value = r["peyrov"].ToString();

gridview2.Rows[i].Cells["varede2"].Value = "نامه داخلی";

i++;
}



cmd = @"SELECT tblDaryafti.ID AS DID,tblLetterSadere.ID AS LSID,tblLetterSadere.LetterID,SenderUserName
,Girande,Aghaye
,Subject,tabaghe,tblDaryafti.jahat,SendDate,Sendti me,
bazgasht,peyrov,IsRead
FROM tblLetterSadere INNER JOIN tblDaryafti
ON tblLetterSadere.ID = tblDaryafti.SadereLetterID
WHERE tblLetterSadere.SenderUserName='" + Program.Username + "' AND tblDaryafti.Archived=0 AND tblDaryafti.Suspend=0 AND tblDaryafti.IsFonosht=0";
objDataAdapter.SelectCommand.CommandText = cmd;


objDataAdapter.SelectCommand.CommandType = CommandType.Text;

objconnection.Open();
objDataAdapter.Fill(objDataSet, "tblLetter2");
objconnection.Close();

//i = 0;
foreach (DataRow r in objDataSet.Tables["tblLetter2"].Rows)
{
gridview2.Rows.Add();
gridview2.Rows[i].Cells["ID2"].Value = r["DID"].ToString();

gridview2.Rows[i].Cells["Shomaresabt1"].Value = r["DID"].ToString();


gridview2.Rows[i].Cells["LetterID2"].Value = r["LetterID"].ToString();
if (gridview2.Rows[i].Cells["LetterID2"].Value.ToString() == "")
gridview2.Rows[i].Cells["LetterID2"].Value = "توسط دبیرخانه شماره نشده";

gridview2.Rows[i].Cells["Subject2"].Value = r["Subject"].ToString();
gridview2.Rows[i].Cells["Girande2"].Value = r["Girande"].ToString() + " - " + r["Aghaye"].ToString();
gridview2.Rows[i].Cells["type2"].Value = r["tabaghe"].ToString();
gridview2.Rows[i].Cells["jahat2"].Value = r["jahat"].ToString();
gridview2.Rows[i].Cells["mohlat2"].Value = "-";
// gridview2.Rows[i].Cells["Day2"].Value = r["Day"].ToString();
gridview2.Rows[i].Cells["senddate2"].Value = r["SendDate"].ToString();
gridview2.Rows[i].Cells["sendtime2"].Value = r["Sendtime"].ToString();
gridview2.Rows[i].Cells["bazgasht2"].Value = r["bazgasht"].ToString();
gridview2.Rows[i].Cells["peyrov2"].Value = r["peyrov"].ToString();
gridview2.Rows[i].Cells["varede2"].Value = "صادره از شرکت";

i++;
}

}
catch (Exception)
{
MessageBox.Show("در ارتباط با بانک اطلاعاتی مشکلی پیش آمده است", "خطا درون بانک اطلاعاتی", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
gridview2.Sort(gridview2.Columns["SendDate2"], ListSortDirection.Descending);
}

بعد توی رویداد دوبار کلیک دیتاگریدویو این رو نوشتم:

private void gridview2_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
Program.LetterID = Convert.ToInt32(gridview2.CurrentRow.Cells["ID2"].Value);
MessageBox.Show(Program.LetterID.ToString());
MessageBox.Show(gridview2.CurrentRow.Cells["varede2"].Value.ToString());
if (gridview2.CurrentRow.Cells["varede2"].Value.ToString() == "صادره از شرکت")
{
this.Hide();
frmViewLetter f = new frmViewLetter("صادره از شرکت");
f.ShowDialog();
this.Show();
}
else
{
this.Hide();
frmViewLetter f = new frmViewLetter("نامه داخلی-ارسالی");
f.ShowDialog();
this.Show();
}
}

روی سطری که فیلد مورد نظرم نوشته " صادره از شرکت " کلیک می کنم برام می نویسه " نامه داخلی " ولی نباید اینجوری باشه. نمی دونم چشه!!!
اینم عکس:
113903

Saeed-CANcel
جمعه 22 آذر 1392, 22:08 عصر
خوب چی باید اونجا بنویسه؟؟؟

forodo
شنبه 23 آذر 1392, 16:41 عصر
باید وقتی روی سطر " صادره از شرکت " که دوبار کلیک می کنم باید

frmViewLetter f = new frmViewLetter("صادره از شرکت");

اجرا بشه و بنویسه " صادره از شرکت " ولی نمی دونم چرا روی اون سطر دوبار کلیک می کنم

frmViewLetter f = new frmViewLetter("نامه داخلی-ارسالی");

اجرا می شه!
گشتم ولی جایی رو پیدا نکردم که یه وقت اتفاقی اسمش عوض بشه.

aslan
شنبه 23 آذر 1392, 23:52 عصر
سلام
breakpoint بزارین ببینین این شرطتون
if (gridview2.CurrentRow.Cells["varede2"].Value.ToString() == "صادره از شرکت") درسته یا نه؟

forodo
یک شنبه 24 آذر 1392, 12:10 عصر
توی رویداد دوبارکلیک دیتاگریدویو اینو نوشتم که به من عدد 1 نشون میده. دیتاگریدویوی من 2تا سطر داره. من رو دومی که کلیک می کنم 1 رو نشون می ده.

MessageBox.Show(e.RowIndex.ToString());

بعد یک برک پوینت می ذارم کنار این :

if (gridview.CurrentRow.Cells["varede"].Value.ToString() == "نامه داخلی")
{
this.Hide();
frmViewLetter f = new frmViewLetter("نامه داخلی");
f.ShowDialog();
this.Show();
}

وقتی موس رو می برم روی CurrentRow به من 0 رو نشون می ده.
چرا اینطوریه؟؟؟
وقتی هم که برک پوینت رو برمی دارم و از SelectedRows[e.RowIndex] به جای CurrentRow استفاده می کنم این ارور رو بهم میده.

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

khokhan
یک شنبه 24 آذر 1392, 16:53 عصر
آیا چیزه دیگه ای هست بشه جای CurrentRow گذاشت؟؟؟
البته فکر نمی کنم جواب بده ولی امتحانش ضرر نداره.
اینو امتحان کن ببین جواب می ده؟؟؟؟؟:لبخند:


private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
string msg = String.Format("Row: {0}, Column: {1}",
dataGridView1.CurrentCell.RowIndex,
dataGridView1.CurrentCell.ColumnIndex);
MessageBox.Show(msg, "Current Cell");
}
البته درستش اینه چون دیتا گرید اندیس اولین سطرش صفر هست :


private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
string msg = String.Format("Row: {0}, Column: {1}",
dataGridView1.CurrentCell.RowIndex+1,
dataGridView1.CurrentCell.ColumnIndex);
MessageBox.Show(msg, "Current Cell");
}

forodo
یک شنبه 24 آذر 1392, 17:16 عصر
این دوتا سطر داخل دیتاگریدویوی من هستش.
113989
من روی " صورتجلسه " دوبارکلیک می کنم:
کد زیر به من " 1 " رو نشون میده که درسته.

MessageBox.Show(e.RowIndex.ToString());

خط زیر به من " 3 " رو نشون میده که اینم درسته. ( یه ستونم Visibleاش false )

MessageBox.Show(e.ColumnIndex.ToString());

ولی دو خط زیر به من عکس زیریش رو نشون می ده که غلطه:

string msg = String.Format("Row: {0}, Column: {1}", gridview.CurrentCell.RowIndex, gridview.CurrentCell.ColumnIndex);
MessageBox.Show(msg, "Current Cell");

113990
نمی دونم چرا جایی که دیتاگریدویو میاد تو کار قاط می زنه! عجبا!!!!!!!!

khokhan
یک شنبه 24 آذر 1392, 17:25 عصر
نمی دونم چرا جایی که دیتاگریدویو میاد تو کار قاط می زنه! عجبا!!!!!!!!
.................................................. .................................:لبخند:
113991

این کد درسته:

private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
string msg = String.Format("Row: {0}, Column: {1}",
dataGridView1.CurrentCell.RowIndex+1,
dataGridView1.CurrentCell.ColumnIndex);
MessageBox.Show(msg, "Current Cell");
}

forodo
یک شنبه 24 آذر 1392, 17:33 عصر
من نمی گم کد شما غلطه.
کد شما درسته ولی برای گرید من چرا این ارور رو می زنه.
من 3تا گریدویو دارم که با 3تاشون این مشکل رو دارم.
هم CurrentRow درسته هم SelectedRows[e.RowIndex] درسته هم کدا شما درسته ولی برای من چرا جواب نمی ده وقتی تو گرید می ندازمشون؟!؟!؟!؟!؟!؟!؟!؟!؟

forodo
یک شنبه 24 آذر 1392, 21:52 عصر
مشکلش فهمیدم از کجاست.
توی رویداد Activate فرم تمام سطرهای گریدویوم پاک میشد بعد دوباره از اول پر میشد. ( خودم این کاررو انجام دادم )
وقتی MessageBox گذاشته بودم وقتی که مسیجباکس رو اوکی می کردم دوباره گریدویو از اول پر می شد چون فرمم اکتیو شده بود و سطر اول همیشه انتخاب می شد و الی آخر و تمام مشکلات.
تمام مسیجباکسام رو که برداشتم درست شد.
این کدای رویداد دوبار کلیک دیتاگریدویوم هستش: اگه از اول مسیجباکسم رو اینجا می ذاشتم درست می شد

private void gridview_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
Program.LetterID = Convert.ToInt32(gridview.CurrentRow.Cells["ID"].Value);
if (gridview.CurrentRow.Cells["varede"].Value.ToString() == "نامه داخلی")
{
this.Hide();
frmViewLetter f = new frmViewLetter("نامه داخلی");
f.ShowDialog();
this.Show();
}
else if (gridview.CurrentRow.Cells["varede"].Value.ToString() == "وارده به شرکت")
{
this.Hide();
frmViewLetter f = new frmViewLetter("وارده به شرکت");
f.ShowDialog();
this.Show();
}
else if (gridview.CurrentRow.Cells["varede"].Value.ToString() == "نامه صادره از شرکت")
{
this.Hide();
frmViewLetter f = new frmViewLetter("نامه صادره از شرکت");
f.ShowDialog();
this.Show();
}
MessageBox.Show(gridview.CurrentRow.Cells["varede"].Value.ToString());
UpdateReadLetter();
}

اینم رویداد اکتیویت فرمم:

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;
}


دلایلی که به بنده جواب داده نمی شد که البته حدس می زنم رو عرض می کنم:
1- توی تالار چون تعداد جوابهایی که به بنده داده شده 10 تا بود بعضی ها می گفتند که حتماً جواب گرفته یا اگر 10 نفر جواب دادن و به جواب نرسیده پس ما نمی تونیم مشکلش رو حل کنیم چون حتماً مشکل بزرگی داره. ( به خودتون ایمان داشته باشید )
2- توضیحات پست اول و کدها زیاد بود و با دیدن آنها کسی رغبت نمی کرد که بخونه. ( بعضی مواقع منهم اینجوریم )
3- توضیحات بنده کافی نبود.