C# 如何仅在上面一行的特定单元格被填充后向datagridview添加新行?
我正在用C#(.NET4.0)开发一个桌面应用程序。我有一个datagridview,通过custom(它继承BindingList)BindingList(添加了排序功能)填充了自定义对象。我使用cellValidating事件正确递增第一列(ID),并验证其他单元格的输入 问题是,当我到达新行/最后一行并在一个单元格中输入某些内容(我甚至可以在离开单元格之前删除所有输入)时,datagridview会自动将该行添加到绑定列表中,并在下面创建一个新行。我希望最后一行/新行仅在上面的行(前一新行)正确填充时添加 示例C# 如何仅在上面一行的特定单元格被填充后向datagridview添加新行?,c#,validation,datagridview,row,C#,Validation,Datagridview,Row,我正在用C#(.NET4.0)开发一个桌面应用程序。我有一个datagridview,通过custom(它继承BindingList)BindingList(添加了排序功能)填充了自定义对象。我使用cellValidating事件正确递增第一列(ID),并验证其他单元格的输入 问题是,当我到达新行/最后一行并在一个单元格中输入某些内容(我甚至可以在离开单元格之前删除所有输入)时,datagridview会自动将该行添加到绑定列表中,并在下面创建一个新行。我希望最后一行/新行仅在上面的行(前一新行
ID NAME PRICE ...
1 Beer 2.6
2 Cheese 3.3
_ _______ ____ <- empty row
ID NAME价格。。。
1啤酒2.6
2.3.3
_您必须处理行验证
事件,并在检查特定条件后取消对事件的处理(验证规则)。然后,当前输入的行将不会提交到DataGridView,并且不会添加新行
例如:
if (dgv[0, e.RowIndex].Value == DBNull.Value)
{
dgv.Rows[e.RowIndex].ErrorText = "You must enter a value for this field!";
// Tell the DataGridView not to accept this row
e.Cancel = true;
}
如果你正在开发一个Windows应用程序,并有文本框来从用户那里获得输入,以便更新到DATAGIDVIEW,你可以在C语言本身中完成它,考虑以下内容:
if(txtNAME.Text.Trim()!=String.Empty&&txtPRICE.Text.Trim()!=String.Empty)
{
MessageBox.Show("Invalid type of input","Alert", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
SqlConnection _sqlconnectionOne=new SqlConnection(*DatabaseConnectionString*);
SqlCommand _sqlcommandOne=new SqlCommand();
_sqlcommandOne.CommandType=CommandType.Text;
_sqlcommandOne.CommandText="*INSERTStatement*";
_sqlcommandOne.Connection=_sqlconnectionOne;
_sqlcommandOne.ExecuteNonQuery();
SqlConnection _sqlconnectionSecond=new SqlConnection(*DatabaseConnectionString*);
SqlCommand _sqlcommandSecond=new SqlCommand();
_sqlcommandSecond.CommandType=CommandType.Text;
_sqlcommandSecond.CommandText="*SELECT*Statement*";
_sqlcommandSecond.Connection=_sqlconnectionSecond;
SqlDataAdapter _sqldataadapter=new SqlDataAdapter(_sqlcommandSecond);
DataTable _datatable=new DataTable();
_sqldataadapter.fill(_datatable);
*DataGridViewName*.DataSource=_datatable;
}
或者,您可以将Leave事件用于文本框,但有时会变得有点拥挤。
欢迎提出建议