PDA

View Full Version : کمبو باکس



essa_61
چهارشنبه 14 شهریور 1386, 16:30 عصر
من قبلا توی 2003 با کد زیر می تونسم به item توی کمبو باکس دسترسی داشته باشم ولی حلا برام کار نمی کنه





MessageBox.Show(cmd_name.Items[0].ToString()) ;


حالا توی مسج باس این رو میده



system.data.datarowview

چی کار کنم ؟؟

ضمنا کمبو باکس با این کد بایند شده



SqlConnection conn = newSqlConnection(cls_public.sqlpath);
SqlDataAdapter da = newSqlDataAdapter("SELECT family+' '+name AS name, id FROM tbl_CUSTOMER", conn);
DataSet ds_customer = newDataSet();
conn.Open();
da.Fill(ds_customer, "customer");
conn.Close();
cmd_name.DataSource = ds_customer.Tables[0];
cmd_name.DisplayMember = "name";

rasoul_ras
چهارشنبه 14 شهریور 1386, 16:39 عصر
من قبلا توی 2003 با کد زیر می تونسم به item توی کمبو باکس دسترسی داشته باشم ولی حلا برام کار نمی کنه

صد در صد اشتباه از جا دیگریست
چون فرقی نمی کنه
ببینم combo box رو با چی پر می کنی آن ایراد داره

essa_61
چهارشنبه 14 شهریور 1386, 18:34 عصر
نمیدونم از چی هست وقتی بایند نباشه کار میکنه للطفا به کد های بایند کردنم نگاه کنید

mehdisiavashian
چهارشنبه 21 شهریور 1386, 15:36 عصر
کسی مشکل رو نمی دونه کجاست؟ ظاهرا همه چیز درسته؟

gomnam
چهارشنبه 21 شهریور 1386, 21:36 عصر
کسی مشکل رو نمی دونه کجاست؟ ظاهرا همه چیز درسته؟




SqlConnection conn = newSqlConnection(cls_public.sqlpath);
SqlDataAdapter da = newSqlDataAdapter("SELECT family+' '+name AS name, id FROM tbl_CUSTOMER", conn);
DataSet ds_customer = newDataSet();
conn.Open();
da.Fill(ds_customer, "customer");
conn.Close();
cmd_name.DataSource = ds_customer.Tables[0];
cmd_name.DisplayMember = "name";
cmd_name.ValueMember = "name";






MessageBox.Show(cmd_name.SelectedValue.ToString()) ;



اگه نیاز داری که حتما توسط این کد



MessageBox.Show(cmd_name.Items[0].ToString()) ;




به داده هات دسترسی داشته باشی
comboBox را اینطوری پرش کن




SqlConnection conn = newSqlConnection(cls_public.sqlpath);
SqlDataAdapter da = newSqlDataAdapter("SELECT family+' '+name AS name, id FROM tbl_CUSTOMER", conn);
DataSet ds_customer = newDataSet();

da.Fill(ds, "customer");
int count = ds.Tables[0].DefaultView.Count;
if (count > 0)
{
for (int i = 0; i < count; i++)
{
comboBox1.Items.Add(ds.Tables[0].DefaultView[i]["name"].ToString());

}

comboBox1.SelectedIndex = 0;
}




نکته
1)برای خوندنداده ها نیاز نیست که که دستور con.Open() را بنویسی
پس در کدت 2 خط con.Open() و con.Close() زیادیه

2) جهت اقزایش performance بهتره که دستور sqlconnection را داخل بلاک using بنویسی
اینطوری




using (SqlConnection conn = newSqlConnection(cls_public.sqlpath))
{
SqlDataAdapter da = newSqlDataAdapter("SELECT family+' '+name AS name, id FROM tbl_CUSTOMER", conn);
DataSet ds_customer = newDataSet();

da.Fill(ds, "customer");
int count = ds.Tables[0].DefaultView.Count;
if (count > 0)
{
for (int i = 0; i < count; i++)
{
comboBox1.Items.Add(ds.Tables[0].DefaultView[i]["name"].ToString());

}

comboBox1.SelectedIndex = 0;
}

}



بعد از پایان بلاک using فضای اختصاص داده شده یه con ازش گرفته میشه (اتوماتیک)
در مورد کاربر ها و مزایای دستور using هم توصیه میکنم مطالعه کنی

همچنین توی کد هات sqlInjection هست
شدیدا توصیه میکنم که از storedprocedure استفاده کنی

البته نکاتی که گفتم مربوط به مشکل شما نمیشد ولی چون گفتی به کدم نگاه کنید مجبور شدم که بگم
امیدوارم مفید بوده باشه

PC2st
چهارشنبه 21 شهریور 1386, 23:23 عصر
من قبلا توی 2003 با کد زیر می تونسم به item توی کمبو باکس دسترسی داشته باشم ولی حلا برام کار نمی کنه

MessageBox.Show(cmd_name.Items[0].ToString());

باید یک تبدیل نوع صورت بگیره...
اگر نوع فیلد name از نوع string باشه، بجای کد خودتون، از کد زیر استفاده کنید:


MessageBox.Show((string)((DataRowView)cmd_name.Ite ms[0])["name"]);

کد فوق، همان نتیجه ای رو میده که لازم دارید.