Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.193.7] |
|
Сообщ.
#1
,
|
|
|
Попробовал использовать навигатор:
namespace ADOnet { public partial class Form1 : Form { private DataSet ds; private OleDbDataAdapter da; OleDbCommand cmd; OleDbConnection con; OleDbParameter p; BindingSource bs; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { openDb(); ds = new DataSet(); ds.Tables.Add("tbl1ds"); da = new OleDbDataAdapter(); cmd = con.CreateCommand(); cmd.CommandText = "SELECT *FROM tbl1"; da.SelectCommand = cmd; da.FillSchema(ds, SchemaType.Source, "tbl1ds"); da.Fill(ds, "tbl1ds"); cmd.CommandText = "SELECT *FROM tbl2"; da.SelectCommand = cmd; da.FillSchema(ds, SchemaType.Source, "tbl2ds"); bs = new BindingSource(); bs.DataSource = ds.Tables[0]; bsnav.BindingSource = bs; dgv1.DataSource = bs; daInsert(); daUpdate(); daDelete(); } private void daInsert() { string strIns = "INSERT INTO tbl1(id, txt) VALUES (?, ?)"; OleDbCommand insertCmd = new OleDbCommand(strIns, con); da.InsertCommand = insertCmd; p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Original; insertCmd.Parameters.Add(p); p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Original; insertCmd.Parameters.Add(p); } private void daUpdate() { string strUpd = "UPDATE tbl1 SET txt = ? WHERE id = ?"; OleDbCommand updateCmd = new OleDbCommand(strUpd, con); da.UpdateCommand = updateCmd; p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Current; updateCmd.Parameters.Add(p); p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Original; updateCmd.Parameters.Add(p); } private void daDelete() { string strDel = "DELETE FROM tbl1 WHERE id = ? AND txt = ?"; OleDbCommand deleteCmd = new OleDbCommand(strDel, con); da.DeleteCommand = deleteCmd; p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Current; deleteCmd.Parameters.Add(p); p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Current; deleteCmd.Parameters.Add(p); } private void openDb() { con = new OleDbConnection(); con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\Adonet.mdb"; try { con.Open(); } catch { MessageBox.Show("Ошибка соединения с базой данных AdoStudy.mdb"); Application.Exit(); } } private void bindingNavigatorSaveItem_Click(object sender, EventArgs e) { da.Update(ds.Tables[0]); } private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e) { DataRowView dr = (DataRowView) bs.Current; dr.Delete(); } private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e) { bs.MoveNext(); } private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e) { bs.MovePrevious(); } private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e) { bs.MoveFirst(); } private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e) { bs.MoveLast(); } private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) { bs.AddNew(); } } } - при перемещении выделяется не следующая строка, а через одну; - при удалении удаляется текущая и следующая за ней строки; - правильно работает только добавление записи и переход вначало/конец записей. Подскажите, пожалуйста, что я сделал неправильно. Код проекта прилагаю. Прикреплённый файлAdoNet2.zip (29,69 Кбайт, скачиваний: 151) |
Сообщ.
#2
,
|
|
|
Цитата tumanovalex @ - при перемещении выделяется не следующая строка, а через одну; - при удалении удаляется текущая и следующая за ней строки; И на какие мысли это наводит? |
Сообщ.
#3
,
|
|
|
Где-то операции дублируются, а вот где - не знаю.
|
Сообщ.
#4
,
|
|
|
Цитата tumanovalex @ Где-то операции дублируются очевидно здесь: private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e) { bs.MoveNext(); } |
Сообщ.
#5
,
|
|
|
Спасибо за подсказку. Не думал. что код
bs = new BindingSource(); bs.DataSource = ds.Tables[0]; bsnav.BindingSource = bs; dgv1.DataSource = bs; namespace ADOnet { public partial class Form1 : Form { private DataSet ds; private OleDbDataAdapter da; OleDbCommand cmd; OleDbConnection con; OleDbParameter p; BindingSource bs; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { openDb(); ds = new DataSet(); ds.Tables.Add("tbl1ds"); da = new OleDbDataAdapter(); cmd = con.CreateCommand(); cmd.CommandText = "SELECT *FROM tbl1"; da.SelectCommand = cmd; da.FillSchema(ds, SchemaType.Source, "tbl1ds"); da.Fill(ds, "tbl1ds"); cmd.CommandText = "SELECT *FROM tbl2"; da.SelectCommand = cmd; da.FillSchema(ds, SchemaType.Source, "tbl2ds"); bs = new BindingSource(); bs.DataSource = ds.Tables[0]; bsnav.BindingSource = bs; dgv1.DataSource = bs; daInsert(); daUpdate(); daDelete(); } private void daInsert() { string strIns = "INSERT INTO tbl1(id, txt) VALUES (?, ?)"; OleDbCommand insertCmd = new OleDbCommand(strIns, con); da.InsertCommand = insertCmd; p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Original; insertCmd.Parameters.Add(p); p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Original; insertCmd.Parameters.Add(p); } private void daUpdate() { string strUpd = "UPDATE tbl1 SET txt = ? WHERE id = ?"; OleDbCommand updateCmd = new OleDbCommand(strUpd, con); da.UpdateCommand = updateCmd; p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Current; updateCmd.Parameters.Add(p); p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Original; updateCmd.Parameters.Add(p); } private void daDelete() { string strDel = "DELETE FROM tbl1 WHERE id = ? AND txt = ?"; OleDbCommand deleteCmd = new OleDbCommand(strDel, con); da.DeleteCommand = deleteCmd; p = new OleDbParameter("@id", OleDbType.Integer); p.SourceColumn = "id"; p.SourceVersion = DataRowVersion.Original; deleteCmd.Parameters.Add(p); p = new OleDbParameter("@txt", OleDbType.VarChar); p.SourceColumn = "txt"; p.SourceVersion = DataRowVersion.Original; deleteCmd.Parameters.Add(p); } private void openDb() { con = new OleDbConnection(); con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\Adonet.mdb"; try { con.Open(); } catch { MessageBox.Show("Ошибка соединения с базой данных AdoStudy.mdb"); Application.Exit(); } } private void bindingNavigatorSaveItem_Click(object sender, EventArgs e) { da.Update(ds.Tables[0]); } private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e) { bs.AddNew(); } } } |
Сообщ.
#6
,
|
|
|
а зачем вообще в команде удаления параметр @txt?
|
Сообщ.
#7
,
|
|
|
Действительно, убрал txt и все получилось. Спасибо большое!
|