PDA

View Full Version : مشکل در دو dropdownlist



papa_fal
شنبه 21 مرداد 1385, 16:37 عصر
سلام به دوستان
من قبلاً در سایت جستجو کردم.ولی مشکله من کمی متفاوت از بقیه است.
من در فرم خود از 2 تا drop down list استفاده کرده ام.که هر 2 از از پایگاه داده ای از اس کیو ال البته هر کدام از جدولی فیلدها یی را میخوانند.
در یک لیست [اسامیه استادها]و در لیست دیگر [اسامیه دروس ]میباشد.که با انتخاب [استاد مربوطه]و [درس مربوطه] و سپس فشار دادن دکمه [ثبت]:ان درس خاص برای ان استاد خاص ثبت میشود .
مشکل این جاست که وقتی که صفحه لود میشود.تمامه ایتم ها در 2 لیست دیده میشود.
و وقتی که صفحه load میشود از هر دو لیست ایتم های اول آنها دیده میشود.
مثلاً آقای [کریمی] و [ درس پروژه]اگر نخواهیم که ایتم دیگر لیست را انتخاب کنیم.و همان جا فقط بخواهیم که ایتم های اول هر لیست را به هم مربوط کنیم.و دگمه ثبت را فشار دهیم.لیستی که حاوی [اسامیه دروس] است در پایگاه داده ثبت نمیشود .البته ان هم فقط موقعی که در لود اولیه صفحه بدون تغییر بماند.و همان ایتم اولیه را از این لیست را که بطوره پیش فرض انتخاب شده را در نظر میگیریم
این هم کدی که نوشتم:







private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{



SqlConnection con4=new SqlConnection();
con4.ConnectionString="workstation id=P;packet size=4096;integrated security=SSPI;data source=P;persist security info=False;initial catalog=project";
SqlCommand com4=new SqlCommand();
com4.Connection=con4;
com4.CommandText="SELECT magta+' '+gerayesh+' '+pro_name as temp,project_code from project";

con4.Open();
SqlDataReader dtr1 = com4.ExecuteReader();
mydrop1.DataSource = dtr1;

mydrop1.DataTextField = "temp";

mydrop1.DataValueField = "project_code";
mydrop1.DataBind();



dtr1.Close();

con4.Close();

//
SqlConnection con3=new SqlConnection();
con3.ConnectionString="workstation id=P;packet size=4096;integrated security=SSPI;data source=P;persist security info=False;initial catalog=project";
SqlCommand com3=new SqlCommand();
com3.Connection=con3;
com3.CommandText="SELECT prof_name+' '+prof_family as temp,prof_code from professor";

con3.Open();
SqlDataReader dtr = com3.ExecuteReader();

mydrop.DataSource = dtr;

mydrop.DataTextField = "temp";

mydrop.DataValueField = "prof_code";
mydrop.DataBind();


//
dtr.Close();
con3.Close();

}
}


private void save_btn_Click(object sender, System.EventArgs e)
{ string master_capacity =capacity_txt.Text;
SqlConnection con2=new SqlConnection();
con2.ConnectionString="workstation id=P;packet size=4096;integrated security=SSPI;data source=P;persist security info=False;initial catalog=project";
SqlCommand Com=new SqlCommand("INSERT INTO professor_project(prof_capacity,prof_code,project_ code)Values(@prof_capacity,@prof_code,@project_cod e)",con2);
Com.Parameters.Add("@prof_code",TextBox1.Text );
Com.Parameters.Add ("@prof_capacity",master_capacity);
Com.Parameters.Add ("@project_code",TextBox3.Text );
con2.Open();
Com.ExecuteNonQuery();
con2.Close();
//TextBox3.Text=proj_code;
TextBox2.Text=master_capacity;
//TextBox1.Text=profe_code;
}




private void mydrop1_SelectedIndexChanged(object sender, System.EventArgs e)
{
proj_code=mydrop1.SelectedValue.ToString();

TextBox3.Text=proj_code;
}

private void mydrop_SelectedIndexChanged(object sender, System.EventArgs e)
{

profe_code=mydrop.SelectedValue.ToString();
TextBox1.Text=profe_code;

}

reza_rad
یک شنبه 22 مرداد 1385, 09:37 صبح
تا جایی که من از سوالتون متوجه شدم:
مشکل شما اینه که وقتی آیتمی رو انتخاب نمی کنی و همون گزینه های اول لیست ها انتخاب شده اند و save رو میزنی اطلاعات ثبت نمیشه... و احتمالا ارور هم میده...
اگه مشکل همینی باشه که من فهمیدم به این دلیله:
شما موقع save میری از TextBox3 و TextBox1 مقادیر رو می خونی و توی DB میریزی
خب طبیعیه که بار اول توی این دوتا تکست باکس مقداری نیست که بخواد ریخته بشه توی DB . ولی با انتخاب هر کدوم شما کدی نوشتی که تکست ها رو پر می کنه پس بعد از انتخاب درست کار می کنه.
راه حل:
شما باید توی جایی که بایند می کنید به لیست برای اولین بار تکست ها رو هم پر کنید.

اما راه حل کلی تر و بهتر:
از dropdown1.selectedvalue استفاده کنید که کلید رو بهتون میده و دیگه نیازی به ریختن توی تکست نیست.

papa_fal
سه شنبه 24 مرداد 1385, 10:57 صبح
خوب من که از همین دستور استفاده کردم!!!

شما منظورتون اینه که من کجا این دستور را بذارم؟؟؟؟

reza_rad
سه شنبه 24 مرداد 1385, 11:11 صبح
خوب من که از همین دستور استفاده کردم!!!

شما از همین استفاده کردی ولی selectedvalue رو میریزی توی یه تکست بعد از تکست می خونی... و به خاطر همین همیشه باید تکست رو پر کنی توی ایونت selectedchange همونطوریکه الان داری کار می کنی...
ولی اگه مستقیما با selectedvalue کار کنی مشکلی پیش نمیاد.