从按钮c#VB.FORM向gridview添加行
早上好,我正在尝试在c#vb.net和sql server中向gridview表单添加1个按钮1新行,但是我找不到使用按钮向gridview添加1新行的函数 到目前为止,我只向gridview显示了记录,这是我显示数据的代码从按钮c#VB.FORM向gridview添加行,c#,sql,C#,Sql,早上好,我正在尝试在c#vb.net和sql server中向gridview表单添加1个按钮1新行,但是我找不到使用按钮向gridview添加1新行的函数 到目前为止,我只向gridview显示了记录,这是我显示数据的代码 private void txtcod_TextChanged(object sender, EventArgs e) { if (txtcod.Text == "") { }
private void txtcod_TextChanged(object sender, EventArgs e)
{
if (txtcod.Text == "")
{
}
else {
this.dgvcontactos.DataSource = negCli.DatosContacto(MODULOS.Globales.Base, txtcod.Text);
}
}
这是我的数据层,我有一个调用存储过程的函数
公共数据表Contactos\u ClieProvs(字符串basesita,字符串codClie)
{
DataTable dt=新的DataTable();
尝试
{
SqlConnection cnn=newsqlconnection(conexion.CargarBase(basesita));
SqlCommand cmd=newsqlcommand(“execute CONTACTOS@tipo=13,@IdClieProv='”+codClie+'”,cnn);
//cmd.CommandTimeout=0;
SqlDataAdapter da=新的SqlDataAdapter(cmd);
尝试
{
如果(cnn.State==ConnectionState.Closed)
{
cnn.Open();
}
其他的
{
cnn.Close();
cnn.Open();
}
da.填充(dt);
}
catch(SqlException ex){throw ex;}
最后
{
cnn.Close();
}
}
catch(SqlException ex1){throw ex1;}
返回dt;
}
您可以向数据表中添加一行,它将显示在网格上
<>但是考虑使用BDIN源是很好的,在这里您可以按事件设置新行的初始化。
System.Windows.Forms.BindingSource bs = new System.Windows.Forms.BindingSource();
private void txtcod_TextChanged(object sender, EventArgs e)
{
if ("" == "") return;
var dt = negCli.DatosContacto(MODULOS.Globales.Base, txtcod.Text);
bs.DataSource = dt;
bs.AddingNew +=bs_AddingNew;
dt.RowDeleting +=dt_RowDeleting;
this.dgvcontactos.DataSource = bs;
}
void dt_RowDeleting(object sender, DataRowChangeEventArgs e)
{
// Delete from db
}
void bs_AddingNew(object sender, System.ComponentModel.AddingNewEventArgs e)
{
// init new row columns with init values in e.NewObject;
}
private void btnAddNew(object sender, EventArgs e) {
bs.AddNew();
}
private void btnSave(object sender, EventArgs e) {
var dt = bs.DataSource as DataTable;
foreach(DataRow r in dt.GetChanges().Rows) {
if(r.RowState == DataRowState.Added) {
// Save to db
}
if(r.RowState == DataRowState.Modified) {
// Save changes
}
}
dt.AcceptChanges();
}
目前尚不清楚网格是如何填充数据的。它有数据源吗?如果有,则可以将该行添加到数据源。或者可能将网格
allowUserToAddress
设置为true,这将在网格底部留下一个额外的“空”行,用户无需单击按钮即可在其中添加行。此外,是否有某些原因导致您没有在按钮的单击事件中发布代码?只是一个想法。我理解你的观点如果是这样的话,让gridview保留AllowUserToAddress,就像网格完成后一样,保存到数据库中,有什么想法吗?当用户添加一行时,网格中有可以订阅的事件。您可以在用户离开新行后“保存”新数据。如果新行中需要进行数据验证,则可能会打开一个弹出表单来添加新数据,然后代码可以在验证数据后添加该行。当用户在单元格中输入文本时,您当然可以在网格本身中进行验证,但是,如果存在大量验证,我相信添加数据的弹出表单将使验证更加容易。使用本地DataTable变量:DataTable dt=negCli.DatosContacto(MODULOS.Globales.Base,txtcod.text)代码>将网格设置为该变量。现在您可以将一行添加到dt
,它将自动显示在网格中。旁注:SqlDataAdapter可以根据需要打开和关闭连接,因此您可以删除Try{}
块中da.Fill(dt)上方的所有代码代码>行和最后{}
块。如果(r.RowState==DataRowState.Modified){//save Changes}要修改所选行,则在代码中使用{}
块作为一次性对象时,在添加新行时效果非常好,直到“保存”按钮出现之前,如果此查询(r.RowState==DataRowState.Modified){//save Changes}是真的