forodo
چهارشنبه 27 فروردین 1393, 09:18 صبح
سلام
من داخل رویداد لود فرمم 2تا تابع نوشتم:
private void frmControlProzhe_Load(object sender, EventArgs e)
{
getControlProzhe();
SortDatagridview();
}
دقیقاً همونارو داخل رویداد اکتیو فرمم نوشتم:
private void frmControlProzhe_Activated(object sender, EventArgs e)
{
getControlProzhe();
SortDatagridview();
}
تابع های بالا به شرح زیر هستند:
private void getControlProzhe()
{
try
{
SqlConnection objconnection =
new SqlConnection(clsForms.ConnectionString);
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet objDataSet = new DataSet();
int i = 0;
objDataAdapter.SelectCommand.CommandText = @"SELECT tblLetterSadere.ID,tblLetterSadere.LetterID,sender UserName
,Subject,tabaghe,jahat,SendDate,Sendtime,
bazgasht,peyrov
FROM tblLetterSadere WHERE tblLetterSadere.IsFonosht = 1 AND tblLetterSadere.ControlProzheFinish = 0";
objconnection.Open();
objDataAdapter.Fill(objDataSet, "tblLetter3");
objconnection.Close();
foreach (DataRow r in objDataSet.Tables["tblLetter3"].Rows)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells["ID"].Value = r["ID"].ToString();
dataGridView1.Rows[i].Cells["LetterID"].Value = r["LetterID"].ToString();
if (dataGridView1.Rows[i].Cells["LetterID"].Value.ToString() == "")
dataGridView1.Rows[i].Cells["LetterID"].Value = "هنوز توسط دبیرخانه شماره نشده است";
dataGridView1.Rows[i].Cells["Sender"].Value = Program.chk.GetFullName(r["senderUserName"].ToString());
dataGridView1.Rows[i].Cells["Subject"].Value = r["Subject"].ToString();
dataGridView1.Rows[i].Cells["type"].Value = r["tabaghe"].ToString();
dataGridView1.Rows[i].Cells["jahat"].Value = r["jahat"].ToString();
dataGridView1.Rows[i].Cells["senddate"].Value = r["SendDate"].ToString();
dataGridView1.Rows[i].Cells["sendtime"].Value = r["Sendtime"].ToString();
dataGridView1.Rows[i].Cells["bazgasht"].Value = r["bazgasht"].ToString();
dataGridView1.Rows[i].Cells["peyrov"].Value = r["peyrov"].ToString();
dataGridView1.Rows[i].Cells["varede"].Value = "نامه صادره از شرکت";
i++;
}
}
catch (Exception)
{
//MessageBox.Show("در ارتباط با بانک اطلاعاتی مشکلی پیش آمده است", "خطا درون بانک اطلاعاتی",
// MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
و اینم اون یکی تابع
private void SortDatagridview()
{
clsForms fo = new clsForms();
DataTable dttest = new DataTable();
dttest = fo.DataGridView2DataTable(dataGridView1, "ali", 0);
//dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
DataView view = dttest.DefaultView;
view.Sort = "senddate DESC, sendtime DESC";
dataGridView1.DataSource = view;
dataGridView1.Columns["ID"].Visible = false;
dataGridView1.Columns["LetterID"].HeaderText = "شماره نامه";
dataGridView1.Columns["LetterID"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["Sender"].HeaderText = "فرستنده";
dataGridView1.Columns["Sender"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["Subject"].HeaderText = "موضوع";
dataGridView1.Columns["Subject"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["type"].HeaderText = "نوع";
dataGridView1.Columns["type"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["jahat"].HeaderText = "جهت";
dataGridView1.Columns["jahat"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["mohlat"].Visible = false;
dataGridView1.Columns["senddate"].HeaderText = "تاریخ ارجاع";
dataGridView1.Columns["senddate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["sendtime"].HeaderText = "ساعت ارجاع";
dataGridView1.Columns["sendtime"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["bazgasht"].HeaderText = "بازگشت";
dataGridView1.Columns["bazgasht"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["peyrov"].HeaderText = "پیرو";
dataGridView1.Columns["peyrov"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["IsRead"].Visible = false;
dataGridView1.Columns["varede"].HeaderText = "وارده-داخلی-صادره";
dataGridView1.Columns["varede"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
حالا وقتی به رویداد اکتیو فرم می رسه اروره زیر رو در تابع getControlProzhe به من نشون می ده:
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data
من داخل رویداد لود فرمم 2تا تابع نوشتم:
private void frmControlProzhe_Load(object sender, EventArgs e)
{
getControlProzhe();
SortDatagridview();
}
دقیقاً همونارو داخل رویداد اکتیو فرمم نوشتم:
private void frmControlProzhe_Activated(object sender, EventArgs e)
{
getControlProzhe();
SortDatagridview();
}
تابع های بالا به شرح زیر هستند:
private void getControlProzhe()
{
try
{
SqlConnection objconnection =
new SqlConnection(clsForms.ConnectionString);
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
DataSet objDataSet = new DataSet();
int i = 0;
objDataAdapter.SelectCommand.CommandText = @"SELECT tblLetterSadere.ID,tblLetterSadere.LetterID,sender UserName
,Subject,tabaghe,jahat,SendDate,Sendtime,
bazgasht,peyrov
FROM tblLetterSadere WHERE tblLetterSadere.IsFonosht = 1 AND tblLetterSadere.ControlProzheFinish = 0";
objconnection.Open();
objDataAdapter.Fill(objDataSet, "tblLetter3");
objconnection.Close();
foreach (DataRow r in objDataSet.Tables["tblLetter3"].Rows)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells["ID"].Value = r["ID"].ToString();
dataGridView1.Rows[i].Cells["LetterID"].Value = r["LetterID"].ToString();
if (dataGridView1.Rows[i].Cells["LetterID"].Value.ToString() == "")
dataGridView1.Rows[i].Cells["LetterID"].Value = "هنوز توسط دبیرخانه شماره نشده است";
dataGridView1.Rows[i].Cells["Sender"].Value = Program.chk.GetFullName(r["senderUserName"].ToString());
dataGridView1.Rows[i].Cells["Subject"].Value = r["Subject"].ToString();
dataGridView1.Rows[i].Cells["type"].Value = r["tabaghe"].ToString();
dataGridView1.Rows[i].Cells["jahat"].Value = r["jahat"].ToString();
dataGridView1.Rows[i].Cells["senddate"].Value = r["SendDate"].ToString();
dataGridView1.Rows[i].Cells["sendtime"].Value = r["Sendtime"].ToString();
dataGridView1.Rows[i].Cells["bazgasht"].Value = r["bazgasht"].ToString();
dataGridView1.Rows[i].Cells["peyrov"].Value = r["peyrov"].ToString();
dataGridView1.Rows[i].Cells["varede"].Value = "نامه صادره از شرکت";
i++;
}
}
catch (Exception)
{
//MessageBox.Show("در ارتباط با بانک اطلاعاتی مشکلی پیش آمده است", "خطا درون بانک اطلاعاتی",
// MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
و اینم اون یکی تابع
private void SortDatagridview()
{
clsForms fo = new clsForms();
DataTable dttest = new DataTable();
dttest = fo.DataGridView2DataTable(dataGridView1, "ali", 0);
//dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
DataView view = dttest.DefaultView;
view.Sort = "senddate DESC, sendtime DESC";
dataGridView1.DataSource = view;
dataGridView1.Columns["ID"].Visible = false;
dataGridView1.Columns["LetterID"].HeaderText = "شماره نامه";
dataGridView1.Columns["LetterID"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["Sender"].HeaderText = "فرستنده";
dataGridView1.Columns["Sender"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["Subject"].HeaderText = "موضوع";
dataGridView1.Columns["Subject"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["type"].HeaderText = "نوع";
dataGridView1.Columns["type"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["jahat"].HeaderText = "جهت";
dataGridView1.Columns["jahat"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["mohlat"].Visible = false;
dataGridView1.Columns["senddate"].HeaderText = "تاریخ ارجاع";
dataGridView1.Columns["senddate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["sendtime"].HeaderText = "ساعت ارجاع";
dataGridView1.Columns["sendtime"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["bazgasht"].HeaderText = "بازگشت";
dataGridView1.Columns["bazgasht"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["peyrov"].HeaderText = "پیرو";
dataGridView1.Columns["peyrov"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
dataGridView1.Columns["IsRead"].Visible = false;
dataGridView1.Columns["varede"].HeaderText = "وارده-داخلی-صادره";
dataGridView1.Columns["varede"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
حالا وقتی به رویداد اکتیو فرم می رسه اروره زیر رو در تابع getControlProzhe به من نشون می ده:
Rows cannot be programmatically added to the DataGridView's rows collection when the control is data