winform中的datagridview数据添加方式,在我现在用的,有常用的两种,一种是直接绑定数据,还有就是对DataGridView添加行数据。因为winform开发的CS结果里面,没有后台行内绑定的方法,只有在bs里面才有
第一种,绑定数据源:
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter();
try
{
gmyConn = gmyConn == null ? mySqlConnection.GetConn() : gmyConn;
SqlCommand cmd = new SqlCommand(strSql, gmyConn);
cmd.ExecuteNonQuery();
adapter.SelectCommand = cmd;
adapter.Fill(ds, "H_Children_Basic");
dgvChildren.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show("系统故障!" + ex.Message);
return;
}
这种方法,比较简单,方便,但是,有个缺点,就是,操作多个表的数据,就不是很好用了。
所以,在绑定多张表的数据的时候,我又去想了想,还有一种方法,更好用,
第二种方法,对控件DataGirdView添加行内数据
上面是绑定一个dataTable。下面的方法就是将查出来的主表,添加到一个List<T>集合里面。
然后,对其集合循环,就可以了,下面我们看看代码怎么实现吧。
添加集合:
SqlCommand cmd = gmyConn.CreateCommand();
cmd.CommandText = "select * from H_Acticle_Repertory where ActicleId='" + GoodsId + "' and ImportTime between '"+this.dtpkStart.Value+"' and '"+this.dtpkEnd.Value+"'";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read()) //循环读取数据行
{
H_Acticle_Repertory h_acticle_rep = new H_Acticle_Repertory();
h_acticle_rep.ActicleId = Convert.ToInt32(reader["ActicleId"]);
h_acticle_rep.HeadName = (string)reader["HeadName"];
h_acticle_rep.ImportTime = Convert.ToDateTime(reader["ImportTime"]);
h_acticle_rep.ImportNum = Convert.ToInt32(reader["ImportNum"]);
h_Acticle_repertorys.Add(h_acticle_rep);
}
}
行数据添加
private void setDataGridView(string GoodsId)
{
if (h_Acticle_repertorys != null)
{
int number = 1;
foreach (H_Acticle_Repertory h_acticle1 in getRepertoryByGoodsId(GoodsId))
{
this.dgvTotal.Rows.Add(number, getGoodsByID(h_acticle1.ActicleId.ToString()).ActicleName, getGoodsByID(h_acticle1.ActicleId.ToString()).WorkShop, h_acticle1.ImportNum, h_acticle1.ImportTime, h_acticle1.HeadName);
number++;//添加的一个序号
}
}
}
在这里面,还可以写很多方法,返回值,就可以实现多表添加数据了。