1 ضمیمه
مشکل در پر نشدن TextBox های ساخته شده در DataGridView
سلام دوستان
در فرم زیر بعد از زدن دکمه ادامه باید نمراتی که قبلا برای کارنامه درسی داوطلب ثبت شده در گرید لود بشن.
ضمیمه 93070
واسه این کار کد زیر رو نوشتم. (در بانکم یه فیلد به نام نمره دارم ولی در گرید میخوام قسمت صحیح و اعشار نمره رو تو دو ستون مجزا نمایش بدم)
SqlConnection conn = new SqlConnection(FrmMain.strcon);
SqlCommand cmdd = new SqlCommand();
cmdd.Connection = conn;
cmdd.CommandText = "select Tbl_Karname_Darsi.ID_Dars,Name_Dars,Nomre from Tbl_Karname_Darsi inner join Tbl_Dars on Tbl_Karname_Darsi.ID_Dars=Tbl_Dars.ID_Dars where ID_STD=" + int.Parse(txtIDSTD.Text) + " and Azmoon_Year=" + Properties.Settings.Default.Azmoon_Year + " and ID_Azmoon=" + int.Parse(comboBox1.SelectedValue.ToString());
conn.Open();
cmdd.ExecuteNonQuery();
conn.Close();
SqlDataAdapter daa = new SqlDataAdapter(cmdd);
DataTable dtt = new DataTable();
dtt.Clear();
daa.Fill(dtt);
dataGridView1.DataSource = dtt;
dataGridView1.Columns["Nomre"].Visible = false;
DataGridViewTextBoxColumn grdtxt1 = new DataGridViewTextBoxColumn();
grdtxt1.Name = "Nomre_Ashar";
dataGridView1.Columns.Add(grdtxt1);
grdtxt1.HeaderText = "اعشار";
DataGridViewTextBoxColumn grdtxt2 = new DataGridViewTextBoxColumn();
grdtxt2.Name = "Nomre_Sahih";
dataGridView1.Columns.Add(grdtxt2);
grdtxt2.HeaderText = "صحیح";
int count = dtt.Rows.Count;
string str_Nomre_Sahih="", str_Nomre_Ashar = "";
for (int i = 0; i < count; i++)
{
string s = dtt.Rows[i]["Nomre"].ToString();
int x = s.IndexOf(".", 0, s.Length - 1);
str_Nomre_Sahih = s.Substring(0,x);
str_Nomre_Ashar = s.Substring(x+1,s.Length-x-1);
dataGridView1.Rows[i].Cells["Nomre_Sahih"].Value = str_Nomre_Sahih;
dataGridView1.Rows[i].Cells["Nomre_Ashar"].Value = str_Nomre_Ashar;
}
حالا مشکل اینه که بار اول که دکمه ادامه رو میزنم گریدم پر میشه ولی دو ستون نمره اعشار و نمره صحیح خالی میمونه. جالبش اینه که یه بار که دکمه انصراف رو میزنم و دوباره دکمه ادامه رو میزنم اون دوتا ستون هم پر میشن. چرااااا اینجوری؟؟؟ کلی باهاش ور رفتم ولی هیچ
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
جوابش تو زمان Adapter.Fill کردن هست.
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
نقل قول:
نوشته شده توسط
SharpSabre
جوابش تو زمان Adapter.Fill کردن هست.
ممنون بابت توجه کردنت.
ولی فک نمیکنم مشکل اون باشه. همون طور که در عکس مشخصه دو ستون اول گرید مقداردهی شده پس DataTable ام پر میشه.
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
دیتاتیبل را در سطح کلاس تعریف کنید تا از همین یک نمونه دیتاتیبل استفاده کنید چون بعدا میخواهید محتوای دیتاتیبلی که از قبل وجود داشته را clear کنید.
جدا کردن قسمت صحیح و اعشار را در کد sql انجام بدید. به کامند (cmd) توجه کنید:
DataTable dt = new DataTable();
private void button12_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(FrmMain.strcon))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "select Tbl_Karname_Darsi.ID_Dars,Name_Dars,Nomre ,Nomre ,FLOOR(Nomre)as Nomre_sahih ,CAST((Nomre - FLOOR(Nomre))*100 as int)as Nomre_ashar from Tbl_Karname_Darsi inner join Tbl_Dars on Tbl_Karname_Darsi.ID_Dars=Tbl_Dars.ID_Dars where ID_STD=" + txtIDSTD.Text + " and Azmoon_Year=" + Properties.Settings.Default.Azmoon_Year + " and ID_Azmoon=" + comboBox1.SelectedValue;
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
dt.Clear();
da.Fill(dt);
dataGridView1.DataSource = dt;
}
}
}
}
nomre_sahih و nomre_ashar دو ستون از نوع int هستند و در برنامه تون برای استفاده دیگه نیاز به تبدیل به int نیست. البته میتونید نوع این ستونها را در قسمت cast تغییر بدید.
txtIDSTD.Text و ... هم نیاز به تبدیل شدن به عدد ندارند چون آخر سر به رشته کامند الحاق میشن.
دستور select را برای جلوگیری از sql injection و بالا بردن سرعت به صورت یک پروسیجر با پارامترهای مناسب در دیتابیس تعریف کنید و در کدتون اون storedprocedure را فراخوانی کنید.
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
بعد از fill دو تا ستون به دیتاتیبل اضافه کن واطلاعات رو بریز توی اونها.خیلی بهتره
از نظر طراحی, سرعت, حافظه
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
ممنون mafaman2003 و FastCode
با کد mafaman2003 مشکل حل شد. ولی درست متوجه نشدم که مشکل کدم کجا بود که..
نقل قول:
حالا مشکل اینه که بار اول که دکمه ادامه رو میزنم گریدم پر میشه ولی دو ستون نمره اعشار و نمره صحیح خالی میمونه. جالبش اینه که یه بار که دکمه انصراف رو میزنم و دوباره دکمه ادامه رو میزنم اون دوتا ستون هم پر میشن
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
یه مشکل دیگه..
من واسه دو ستون نمره صحیح و نمره اعشار Textbox گذاشته بودم که بتونم ویرایششون کنم و همچنین بتونم محدودش کنم که فقط عدد وارد کنه
با کد جدید mafaman2003 این امکان وجود داره؟؟؟
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
نقل قول:
نوشته شده توسط
FastCode
بعد از fill دو تا ستون به دیتاتیبل اضافه کن واطلاعات رو بریز توی اونها.خیلی بهتره
از نظر طراحی, سرعت, حافظه
خوب من هم در همون کد اولم این کار رو کردم. بعد از fill دوستون از نوع Textbox اضافه کردم و اطلاعات رو ریختم توشون.(اگه منظورتون رو درست متوجه شده باشم)
نقل قول: مشکل در پر نشدن TextBox های ساخته شده در DataGridView
نقل قول:
نوشته شده توسط
Nima_kyan
(اگه منظورتون رو درست متوجه شده باشم)
دو ستون به DataTable نوشتم