PDA

View Full Version : حرکت بین رکورد ها از طریق combobox



s_mostafa_h
یک شنبه 16 اردیبهشت 1386, 22:26 عصر
با سلام

من دو جدول دارم که table1 دارای فیلدهای Id_city و city می باشد و جدول دوم هم که table2 باشد دارای فیلدهای Id_detail و Id_city و Village می باشد . و رابطه بین آنها هم one--->many است .
با استفاده از یک دکمه به نام Next می خوام به رکورد بعدی بروم
در رویداد form_load :



string selectOrder="select * from table2";
strConnection.Open();
da=new SqlDataAdapter(selectOrder,strConnection);
da.Fill(ds, "table2");
textBox1.DataBindings.Add(new Binding("Text", ds.Tables["table2"], "village"));
GetComboBoxName();


و برای کامبوباکس :


private void GetComboBoxName()
{
string Order = "select * from table1";
SqlDataAdapter dacbx = new SqlDataAdapter(Order, strConnection);
dacbx.Fill(ds, "table1");
comboBox1.DataSource = ds.Tables["table1"];
comboBox1.ValueMember = "ID_city";
comboBox1.DisplayMember = "city";
}

و در رویداد دکمه next کلیک :


if (this.manager.Position < this.manager.Count - 1)
this.manager.Position += 1;

که مشکل در بایند کرد این دو به طور همزمان می باشد . ضمنا manager یک آبجکت از BindingManagerBase است . برای حرکت بین رکورد ها مشکل دارم . لطفا راهنمایی کنید .
با تشکر

mohebbi.saeed
یک شنبه 16 اردیبهشت 1386, 23:50 عصر
پیشنهاد : شما باید برای اینکه حرکت کنید بین رکوردها از روش DataBindig نباید استفاده کنید. من خودم همیشه یک تابع MoveRecord درست می کنم آن وقت هر وقت خواستم حرکت کنم بین رکوردها از این تابع استفاده میکنم که یک مقدار ورودی Int دارد این جوری شما می توانید هرچه را که دوست داشتید به مقدار TextBix, ComboBox بدهید. الان هم شما می توانید چنین چیزی داشته باشید:
privete void MoveRecord(int row)
{
txt.text=DataSet.TableName.Rows[row]["NameColumn"].ToSting();
}

اما برای Combo شما می توانید DataSorceو DispalyNameو DisplayeValue را Set کنید سپس برای حرکت بین رکوردها از SelectedValue استفاده کنید.
Cmd.SelectedValue=Dataset.TableName.Rows[Row]["ColumnName"]
که فکر کنم باید Cast هم کنید

s_mostafa_h
دوشنبه 17 اردیبهشت 1386, 01:58 صبح
لطفا کمی بیشتر توضیح دهید !...

Sorenaa_s
دوشنبه 17 اردیبهشت 1386, 14:29 عصر
private DataTable _table;
private SqlConnection strConnection = null;
private void Form1_Load(object sender, System.EventArgs e)
{
string selectOrder="select * from table2";
strConnection.Open();
SqlDataAdapter da = new SqlDataAdapter(selectOrder,strConnection);
_table= new DataTable();
da.Fill( _table );
GoToRecord(0);
}
private void _btnNext_Click(object sender, System.EventArgs e)
{
if( textBox1.Tag == null )
GoToRecord(0);
else
GoToRecord( ((int)textBox1.Tag) + 1 );
}
private void _btnBack_Click(object sender, System.EventArgs e)
{
if( textBox1.Tag != null )
GoToRecord( ((int)textBox1.Tag) - 1 );
}
private void GoToRecord( int index )
{
if( index > _table.Rows.Count || index < 0 )
return;
textBox1.Text = _table.Rows[ index ]["city"].ToString();
textBox1.Tag = index;
int CityID = int.Parse( _table.Rows[ index ]["Id_city"].ToString() );
string Order = "select * from table1 Where Id_city = " + CityID;
SqlDataAdapter dacbx = new SqlDataAdapter( Order, strConnection );
DataTable dt = new DataTable();
dacbx.Fill(dt);
listBox1.DataSource = dt;
listBox1.ValueMember = "ID_city";
listBox1.DisplayMember = "city";
}