C# DataGridView 添加、修改、删除数据实现
本帖最后由 wyz365889 于 2012-10-19 10:34:36 编辑 现在遇到的问题是怎么添加、删除一行数据到DatagridView显示并同步更新到数据库。
代码如下:
public partial class Form_User : Form
{
private DataOpt dataOpt;
private SqlCommand sqlCmd;
private SqlDataAdapter sqlDA;
private DataSet ds;
private DataTable dt;
public Form_User()
{
InitializeComponent();
dataOpt = new DataOpt();
dataOpt.SQLConn();
string strSql = "select * from T_User";
sqlCmd = new SqlCommand(strSql, dataOpt.conn);
sqlDA = new SqlDataAdapter(sqlCmd);
ds = new DataSet();
sqlDA.Fill(ds,"T_User");
dt = ds.Tables["T_User"];
this.dataGridView_user.DataSource = ds;
this.dataGridView_user.DataMember = "T_User";
this.dataGridView_user.AllowUserToAddRows = false;
this.dataGridView_user.EditMode = DataGridViewEditMode.EditProgrammatically;
this.dataGridView_user.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
this.dataGridView_user.Columns[1].Visible = false;
//this.dataGridView_user.ColumnHeadersVisible = false;
this.dataGridView_user.RowHeadersVisible = false;
this.dataGridView_user.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
this.comboBox1_Group.Items.Add("Administrators");
this.comboBox1_Group.Items.Add("Guests");
this.comboBox1_Group.Items.Add("Teachers");
this.comboBox1_Group.SelectedIndex = 0;
}
private void button_Add_Click(object sender, EventArgs e)//添加一行数据
{
string strUserID = textBox1_UserID.Text;
string strUserPWD = textBox3_PWD.Text;
string strGroupID = comboBox1_Group.Text;
string strRemark = textBox2_remark.Text;
//string[] strRow ={ strUserID, "", strUserPWD, strGroupID, strRemark };
//dataGridView_user.Rows.Add(new object[] { strUserID, "22", strUserPWD, strGroupID, strRemark });
DataRow dRow = dt.NewRow();
dt.Rows.Add(dRow);
}
private void button_del_Click(object sender, EventArgs e)//删除一行数据
{
//int RowNumber;
//if (null == dataGridView_user.CurrentCell)
//{
// return;
//}
//int iRow = dataGridView_user.CurrentCell.RowIndex;
//dataGridView_user.Rows.RemoveAt(iRow);
dataGridView_user.DataSource = ds.Tables[0];
dt = ds.Tables["T_User"];
int iRowNow = dataGridView_user.CurrentCell.RowIndex;
DataRow dRow = dt.Rows[iRowNow];
dRow.Delete();
sqlDA.Update(ds);
}
}
[解决办法]
两种方案,第一种:每增改删一行数据记录后,直接操作数据库物理数据表,再进行重新绑定
第二种,每增改删一行数据记录时,更新内存表,最后一次保存更改到物理数据表。
[解决办法]
+1
[解决办法]
第二种,每增改删一行数据记录时,更新内存表,重新绑定内存表,当退出datagridview时一次保存更改到物理数据表。
[解决办法]
楼主:数据库的增改删及与数据控件datagridview的操作,任何一本书上都会提到。
建议你先理流程,再查资料完成,这种功能没法给你写代码。
[解决办法]
那你修改的时候把传一个字段的值,比如主键ID。在编辑页面写一个查询的方法,获取到这个ID为查询条件。把你查到的数据记录显示到编辑页面。剩下来的思路就跟添加一样了。
[解决办法]
肯定是漏掉了插入数据库的操作啊,要插入的数据你等获取到吧
ADO.NET的流程会不 SqlConnect SqlCommand open 执行 close,这样数据才会被擦入到数据库里面啊
插入完成后在读取到DataTable里面绑定即可显示你刚才加的数据了。
[解决办法]
主键本身是有唯一索引的作用的,每个主键都内置一个索引记录,当主键修改时,索引也会跟着修改,会导致索引的杂乱,影响索引的查找速度,虽然可以事后重整索引,但是重整过程整个数据库将无法使用。
必须选择插入后不再有改动的列作为主键,如果没有这个列,就必须使用自增长列DataSet ds = new DataSet();
SqlDataAdapter sda;
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sda.Update(ds);
this.dataGridView1.DataSource = ds.Tables[0];
[解决办法]
你的主键是int行的话,就设置自增长
Guid的话。Guid.NewGuid()
总之就是增加时不要人工输入主键