我在DataGridView(dgvStock为DataGridView名)下创建了一下几列:
DataGridViewTextBoxColumn dtc = new DataGridViewTextBoxColumn();
dtc.Name = "ISRC";
dtc.HeaderText = "商品编号";
dtc.Width = 150;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "DishName";
dtc.HeaderText = "商品全名";
dtc.Width = 150;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Amount";
dtc.HeaderText = "数量";
dtc.Width = 80;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Cost";
dtc.HeaderText = "单价";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.DefaultCellStyle.Format = "C2";
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Sum";
dtc.HeaderText = "金额";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.DefaultCellStyle.Format = "C2";
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Re";
dtc.HeaderText = "备注";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dgvStock.Columns.Add(dtc);
我要如何设置Amount列只能输入数字和回退键?Cost列只能输入数字和小数点和回退键?如何使Sum列自动生成总金额?还有当我连续输入了多行数据的,我怎么把输入的数据保存到数据库?请教大虾帮忙!
DataGridViewTextBoxColumn dtc = new DataGridViewTextBoxColumn();
dtc.Name = "ISRC";
dtc.HeaderText = "商品编号";
dtc.Width = 150;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "DishName";
dtc.HeaderText = "商品全名";
dtc.Width = 150;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Amount";
dtc.HeaderText = "数量";
dtc.Width = 80;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Cost";
dtc.HeaderText = "单价";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.DefaultCellStyle.Format = "C2";
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Sum";
dtc.HeaderText = "金额";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dtc.DefaultCellStyle.Format = "C2";
dtc.ReadOnly = true;
dgvStock.Columns.Add(dtc); dtc = new DataGridViewTextBoxColumn();
dtc.Name = "Re";
dtc.HeaderText = "备注";
dtc.Width = 100;
dtc.SortMode = DataGridViewColumnSortMode.Automatic;
dgvStock.Columns.Add(dtc);
我要如何设置Amount列只能输入数字和回退键?Cost列只能输入数字和小数点和回退键?如何使Sum列自动生成总金额?还有当我连续输入了多行数据的,我怎么把输入的数据保存到数据库?请教大虾帮忙!
你可以用dataGridView的一个事件
我先给你顶顶,后给你查查
重写DataGridViewCell如:
代码较多,详见MSDN
新单元格值含有不想要的字符,就将数据重置(从数据源或设一全局变量)。
总金额,自己算好了。
DatagridView可以自动更新数据源,若数据源是datatable或dataTable的dataview的话,可以用sqldataAdapter.Update(datatable)更新到数据库,这样最简单。
public DataGridViewTextBoxEditingControl cellEdit = null; private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
cellEdit = (DataGridViewTextBoxEditingControl)e.Control;
cellEdit.SelectAll();
cellEdit.KeyPress += new KeyPressEventHandler(dataGridView1_KeyPress);
} private void dataGridView1_KeyPress(object sender, KeyPressEventArgs e)
{
if (dataGridView1.CurrentCellAddress.X == 0)
{
if ((Convert.ToInt32(e.KeyChar) < 48 || Convert.ToInt32(e.KeyChar) > 57) && Convert.ToInt32(e.KeyChar) != 46 && Convert.ToInt32(e.KeyChar) != 8 && Convert.ToInt32(e.KeyChar) != 13)
{
e.Handled = true; // 输入非法就屏蔽
}
else
{
if (Convert.ToInt32(e.KeyChar) == 46)
{
e.Handled = true;
}
} }
}
刚试验成功的。
Cost列你可以自己查查对应的ASCII码值,把dataGridView1.CurrentCellAddress.X == 0改成你列的索引号。
if ((Convert.ToInt32(e.KeyChar) < 48 ....这样的值改成相应的ASCII码值,就可以了Sum列自动统计更简单了,你可以用dataGridView的单元格失去焦点事件来完成,找准数量和单价的索引号,取出他们对应的值(行和列),就可以完成Sum列了还有当我连续输入了多行数据的,我怎么把输入的数据保存到数据库:
这个应该有单击按钮来完成把,不可能,你在DataGridView中刚输入一条数据,一失去焦点数据就插到数据库里面了。
DataGridView和数据库绑定,你是用向导完成的还是自己写的代码,向导完成的绑定,实现起来比较容易些,自己写的代码实现起来麻烦些。
void cellEdit_KeyPress(object sender, KeyPressEventArgs e)
{
if (dgvStock.CurrentCellAddress.X == 2)
{
e.Handled = e.KeyChar < '0' || e.KeyChar > '9';//允许输入数字
if (e.KeyChar == (char)8)//允许输入回退键
e.Handled = false;
}
}
,但是还是先感激你的方法,不然我也实现不了这一步,因为我还是刚刚开始学的,先在这里谢过toploveall大虾的帮忙
还有,我创建的这个DataGridView是用作进货单的,我的数据库字段有StockId(单号),ISRC(产品编号,外键),PublishersId(进货商编号,外键),DepotId(仓库编号,外键),InDate(进货时间),Amount(进货数量),Cost(进货价),我如果有多条信息怎么可以把他们全部取出来插入数据库进货表呢?仓库和进货商是通过下拉框选择的,进货时间就是当前时间,单号是自动生成的到文本框的,请指教,我现在都有点做傻了。