PDA

View Full Version : مشكل در تعيين datasource براي combo box يه صورت كد نويسي نه از طريق پنجره ي property



بیتافرهی
پنج شنبه 04 مهر 1387, 21:44 عصر
سلام
من مي خوام روي فرمم يه combo box بذارم كه اطلاعات اين combo از طريق يكي از فيلد هاي جدولم تامين شود.از طرفي نمي خواهم خواصش را از طريق پنجره ي proprty تعيين كنم ،يعني مي خوام خودم برايش كد بنويسم.
چون وقتي برنامه ام را روي كامپيوتر ديگري مي برم ،اگر برايش كد ننويسم و خواصش را از طريق پنجره ي proprty تعيين كنم؛بايد در كامپيوتر جديد دوباره خواصش را از نو تنظيم كنم.
از طرفي وقتي برايش كد هاي زير را مي نويسم ،error مي دهد:

comboBox2.DataSource = "tbl_computer";
comboBox2.DisplayMember = "id";
comboBox2.ValueMember = "id";
comboBox2.DataBindings.Add(new Binding("text", ds, "tbl_computer_component.computer_idf"));
البته فقط روي خط اول.
وقني كد نويسي نمي كنم ،data source را با نام ديگري تعيين مي كند،(كلمات ديگري را نيز به آن اضافه مي كند) در صورتي كه نام جدول من كه به عنوان datasource هست ، اين نيست.مثلا براي خط اول كد بالا اين منبع را در نظر مي گيرد و خطايي ندارد .
اما مشكل من اينجاست كه حودم مي خواهم برايش كد بنويسم تا مشكل بالا پيش نيايد.اشكال كار من كجاست؟

comboBox1.DataSource = tbl1cpuBindingSource;

rostamkhani
پنج شنبه 04 مهر 1387, 23:31 عصر
فکر کنم مشکل کار از این کد


comboBox2.DataSource = "tbl_computer";
شما میتونی به DataSource مثلا یک DataTable بدین نه نام اون رو به صورت String
مثل:


Datatable dt=new Datatable();
combo.datasource=dt;

میتونین dt با dataAdapter پور کنین

یا اگه از DataSet استفاده میکنین


combo.datasource=ds.tables["tbl_computer"];

fea1436
جمعه 05 مهر 1387, 08:06 صبح
مي‌تونيد يك كلاس بنويسيد كه تو اون كلاس يه كانكشن با بانكتون برقرار كنيد ديتائي رو كه مي‌خوايد تو يه ديتاست بريزيد و بعدش از اون ديتاست (كه داخلش ديتا تيبل) قرار داره ، كومبوتون رو پر كنيد.

bachebahal_1363
جمعه 05 مهر 1387, 09:34 صبح
comboBox2.DataSource = "tbl_computer";
comboBox2.DisplayMember = "id";
comboBox2.ValueMember = "id";
comboBox2.DataBindings.Add(new Binding("text", ds, "tbl_computer_component.computer_idf"));



کد شما مشکلی کوچیک داره باید به صورت زیر تغییر پیدا کنه در حقیقت باید یک DataAdapter و DataSet اضافه بشه .



SqlConnection cn = new SqlConnection("ConnectionString");
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = cn;
da.SelectCommand.CommandText =
"SELECT * FROM TableName";
da.SelectCommand.CommandType = CommandType.Text;
cn.Open();
da.Fill(ds, "TableName");
cn.Close();
ComboBox.DataSource = ds;
ComboBox.DataSource = ds.Tables["TableName"].DefaultView;
ComboBox.DisplayMember = "filedName";
ds = null;
da = null;

که به جای TableName نام جدول و FiledName نام فیلد مورد نظر که می خواهید در ComboBox نمایش داده بشه رو می نویسید .

بیتافرهی
جمعه 05 مهر 1387, 16:08 عصر
;


من از كد استفاده كردم وerror نگرفت ولي يه مشكل ديگه برام ايجاد شد و اونم اينه كه من براي اينكه ركوردهاي مختلف را كه قبلا وارد كردم را ببينم از دكمه هاي navigation استفاده مي كنم.الان كه كد شما را گذاشته ام وقتي اين دكمه هاي جلو وعقب را مي زنم ،ديگر چيزي نشان نمي دهد.

اينم كد يكي از اون دكمه ها است:

private void btnMoveFirst_Click(object sender, EventArgs e)
{
bindfield();/////////now
this.BindingContext[ds, "tbl_computer_component"].Position = 0;
txtrecord.Text = Convert.ToString(this.BindingContext[ds, "tbl_computer_component"].Position + 1);//namayesh shomare record dar textbox
//temp = Convert.ToInt32(textBox1.Text);//////111

bindfield();/////////now
try
{
temp = Convert.ToInt32(textBox1.Text);//////111
}
catch (Exception ex)
{
MessageBox.Show("error", ex.Message);
}
bindfield();/////////now
}

بیتافرهی
جمعه 05 مهر 1387, 17:20 عصر
منظورم از دكمه هاي navigation ايناست.عكسشو ضميمه كردم:


ComboBox.DataSource = ds.Tables["TableName"].DefaultView;
منظورتون از default view چيه؟