وقتی که بخواهیم دو ComboBox را با استفاده از یکدیگر لود کنیم، در بعضی مواقع خطای زیر رخ میدهد، در این آموزش نحوه کد نویسی و رفع خطا را فراخواهید گرفت.

پرکردن Combobox با اطلاعات  داخل Table و نحوه رفع خطای The multi-part identifier




ابتدا تابعی برای لود اطلاعات کمبوباکس اول تعریف می کنیم :

void load_combo1()
{

SqlConnection conn = new SqlConnection(کانکشن استرینگ خود را اینجا بنویسید);
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(دستور سکلت خود را اینجا بنویسید, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
conn.Close();
comboBox1.DataSource = dt;
comboBox1.ValueMember = "نام فیلد کد را اینجا بنویسید";
comboBox1.DisplayMember = "نام فیلد متن را اینجا بنویسید";

}

پس از  تعریف در تایع from load کد زیر را قرار دهید، تا با نمایش فرم اطلاعات داخل کمبو باکس فراخوانی شود :

load_codelang_combo();
سپس تابع لود اطلاعات کمبوباکس دوم را تعریف می کنیم :

void load_combo2()
{

if (comboBox1.SelectedValue.ToString() == "System.Data.DataRowView"){ return; }
           
SqlConnection conn = new SqlConnection(کانکشن استرینگ خود را اینجا بنویسید);
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(دستور سکلت خود را اینجا بنویسید WHERE نام فیلد کد=" + comboBox1.SelectedValue.ToString(), conn);
DataTable dt = new DataTable();
sda.Fill(dt);
conn.Close();
comboBox2.DataSource = dt;
comboBox2.ValueMember = "نام فیلد کد را اینجا بنویسید";
comboBox2.DisplayMember = "نام فیلد متن را اینجا بنویسید";
}


برای رویداد تغییر مقدار کمبوباکس 1  (comboBox1_SelectedValueChanged) نیز کد زیر را مینویسیم :

            load_codelangversion_combo();

کدی که با رنگ نارنجی مشخص شده است، برای جلوگیری از خطای زیر کاربرد دارد :

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code
Additional information: The multi-part identifier "System.Data.DataRowView" could not be bound.


 دلیل بروز خطا چیست؟

وقتی که کد لود اطلاعات درحال اجراست، مقدار کنونی کمبوباکس 1 تغییر میکند و comboBox1_SelectedValueChanged اجرا میشود، و کد فوق نیز تابع لود اطلاعات کمبوباکس 2 را اجرا میکند. در این حین چون هنوز اجرای کد کمبوباکس 1 به اتمام نرسیده است و ما در کد دوم مقدار کنونی آن را دریافت کرده ایم کد comboBox1.SelectedValue.ToString رشته System.Data.DataRowView را باز میگرداند و باعث بروز خطا می شود.