DataGridView 绑定的数据源是 mDetailTable,
在DataGridView 中单击"品名"一列时,
先 mDetailTable.NewRow() 得到一个新的row,然后将这个row传给弹出窗口,
由弹出窗口编辑内容后返回这个row,让mDetailTable.Rows.Add(row)添加数据,
然后DataGridView 刷新 dgvEdit.Refresh(),现在的问题是添加一行记录后,DataGridView后面会出来两个空行,
按我的想法,最多应该是一个用来新增的空行啊,这个是什么问题,怎么解决啊?DataGridView 的EditMode 是 EditProgrammaticallyCSDN不能帖图,我画个样子,大家帮我看看
┏┳━━┳━━┳━━┳━━┓
┃┃品名┃型号┃单位┃数量┃ //列头
┣╋━━╋━━╋━━╋━━┫
┃┃001 ┃S001┃ 个 ┃1000┃
┣╋━━╋━━╋━━╋━━┫
┃┃ ┃ ┃ ┃ ┃ //空行一,添加后,焦点会自动到这一行第一列
┣╋━━╋━━╋━━╋━━┫
┃┃ ┃ ┃ ┃ ┃ //空行二,不知道为什么会出来?
┗┻━━┻━━┻━━┻━━┛ //连接数据源
private void InitData()
{
dgvEdit.DataSource = mDetailTable;
}
//在品名一列单击时,弹出一个窗口编辑数据
private void dgvEdit_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvEdit.Columns[e.ColumnIndex].Name == "品名")
{
FormOrderDetailInput frmInput = new FormOrderDetailInput();
DataRow row;
if (e.RowIndex >= mDetailTable.Rows.Count)
{
row = mDetailTable.NewRow();
}
else
{
row = mDetailTable.Rows[e.RowIndex];
}
frmInput.EditOrderDetail(row);
if (frmInput.DialogResult == DialogResult.OK)
{
if (e.RowIndex >= mDetailTable.Rows.Count)
{
mDetailTable.Rows.Add(row);
//dgvEdit.CancelEdit(); 添加后用取消编辑也没用
//dgvEdit.EndEdit(); 添加后提交也没用
}
dgvEdit.Refresh();
}
}
}
在DataGridView 中单击"品名"一列时,
先 mDetailTable.NewRow() 得到一个新的row,然后将这个row传给弹出窗口,
由弹出窗口编辑内容后返回这个row,让mDetailTable.Rows.Add(row)添加数据,
然后DataGridView 刷新 dgvEdit.Refresh(),现在的问题是添加一行记录后,DataGridView后面会出来两个空行,
按我的想法,最多应该是一个用来新增的空行啊,这个是什么问题,怎么解决啊?DataGridView 的EditMode 是 EditProgrammaticallyCSDN不能帖图,我画个样子,大家帮我看看
┏┳━━┳━━┳━━┳━━┓
┃┃品名┃型号┃单位┃数量┃ //列头
┣╋━━╋━━╋━━╋━━┫
┃┃001 ┃S001┃ 个 ┃1000┃
┣╋━━╋━━╋━━╋━━┫
┃┃ ┃ ┃ ┃ ┃ //空行一,添加后,焦点会自动到这一行第一列
┣╋━━╋━━╋━━╋━━┫
┃┃ ┃ ┃ ┃ ┃ //空行二,不知道为什么会出来?
┗┻━━┻━━┻━━┻━━┛ //连接数据源
private void InitData()
{
dgvEdit.DataSource = mDetailTable;
}
//在品名一列单击时,弹出一个窗口编辑数据
private void dgvEdit_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgvEdit.Columns[e.ColumnIndex].Name == "品名")
{
FormOrderDetailInput frmInput = new FormOrderDetailInput();
DataRow row;
if (e.RowIndex >= mDetailTable.Rows.Count)
{
row = mDetailTable.NewRow();
}
else
{
row = mDetailTable.Rows[e.RowIndex];
}
frmInput.EditOrderDetail(row);
if (frmInput.DialogResult == DialogResult.OK)
{
if (e.RowIndex >= mDetailTable.Rows.Count)
{
mDetailTable.Rows.Add(row);
//dgvEdit.CancelEdit(); 添加后用取消编辑也没用
//dgvEdit.EndEdit(); 添加后提交也没用
}
dgvEdit.Refresh();
}
}
}
解决方案 »
- 为什么Delphi2006以后的版本占用的内存是Vs2003以后版本的一半,而性能也VS2003以后的一半??
- C#程序怎么操作远程机器的一个文件目录?
- 怎样用InstallShield 2008把.netframework一起打包进去啊
- window.open能不能实现这个功能?
- c# graphics的transform属性
- 如何在一个windows服务程序里获得该服务程序的路径
- 来的看看,请各位大虾帮忙
- 高分求救!!!关于Remoting,如何调用两个远程对象
- 最近准备辞职,烦请告诉以下辞职的流程及注意事项
- DataGrid中显示多个表
- C#中init()方法是起什么作用啊
- 谁用过Epson MT532的热敏打印机,有没有相关的驱动和SDK啊?
private void button1_Click(object sender, EventArgs e)
{
//增加一条数据
DataRow newRow = ds.Tables["student"].NewRow();
newRow["sno"] = "111";
newRow["sname"] = "bbb";
newRow["sage"] = 23;
ds.Tables["student"].Rows.Add(newRow);
this.dataGridView1.Refresh();
} private void Form1_Load(object sender, EventArgs e)
{
DataBind();
}
//数据绑定
private void DataBind()
{
SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
SqlDataAdapter sda = new SqlDataAdapter("select * from studentDetails", con);
sda.Fill(ds, "student");
//绑定之前设置
this.dataGridView1.AllowUserToAddRows = false;
this.dataGridView1.DataSource = ds.Tables["student"];
}
因为我要新增数据,又不想再加按钮作新增记录,所以 dataGridView.AllowUserToAddRows一直高为True,这样在记录集为空时,可以单击空行增加记录。对于liuja_0421说得,为什么不直接通过 DataGridView 编辑,因为我对C#还不是很了解,这个DataGridView用得还不是很熟,二是因为很多地方都说编辑绑定的DataGridView最好直接编辑数据源,这样DataGridView就可以直接更新,所以我也想这么做,究竟那种方法好,我也不敢说,三是因为这个DataTable其实会连接几个子表,其中的项目不过用ID来关联的,这个我知道用 DataGridViewComboBoxColumn 可以实现,但是这样好像就把这一列绑定到了基本项目表了,比如说单位,字段多了,每个都要定义一个 DataGridViewComboBoxColumn 好麻烦,不如直接在另一个窗体上面放一个 ComboBox,读写也方便,反正是我还太菜了。好了,言归正传,把解决的方法说一下,经过楼上的提醒,虽然绑定的时候不能设置 DataGridView.AllowUserToAddRows=false;那我就在新增数据的地方加了这句,数据刷新后再把DataGridView.AllowUserToAddRows=true;设置回来就OK了 DataGridView.AllowUserToAddRows=false;
if (e.RowIndex >= mDetailTable.Rows.Count)
{
mDetailTable.Rows.Add(row);
//dgvEdit.CancelEdit(); 添加后用取消编辑也没用
//dgvEdit.EndEdit(); 添加后提交也没用
}
dgvEdit.Refresh();
DataGridView.AllowUserToAddRows=true;