PDA

View Full Version : سوال: Rows cannot be programmatically added to the DataGridView's rows collection when the control is data



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

مهرداد صفا
چهارشنبه 27 فروردین 1393, 15:54 عصر
سلام.
در متود دوم با:


dataGridView1.DataSource = view;

DataView به گرید متصل شده و در این حالت شما نمی تونید مستقیما یک Row به dataGrid اضافه کنید.

forodo
چهارشنبه 27 فروردین 1393, 16:50 عصر
با همین کدها چطور می تونم مستقیماً یک سطر به دیتاگرید اضافه کنم.
یعنی نمی خوام بریزم توی دیتاتیبل و بعد یه سطر بهش اضافه کنم و دوباره بدم به دیتاگرید.