WinForm学习总结,DataGrid和Form
WinForm学习总结
1:WinForm DataGrid
常用属性:
RowHeaderVisible=true or false 指示行表头是否可见
常用事件
CurrentCellChanged 更改CurrentCell当前数值时候激发此事件
把当前Datagrid焦点赋给指定行、列。
dataGrid1.CurrentCell=new DataGridCell(RowNum,ColNum);
选择指定行
dataGrid1.Select(RowNum);
取消选择指定行
dataGrid1.UnSelect(RowNum);
取指定行、列的值
dataGrid1[RowNum,ColNum].ToString();
过滤显示的数据
dsQuotation.Tables["c_quotation"].DefaultView.RowFilter="status='上传失败' or status='待签名'";
*************************************************************************************自定义列
DataGridTableStyle style=new DataGridTableStyle();
style.MappingName="c_quotation";
style.AlternatingBackColor=System.Drawing.Color.Silver;
DataGridTextBoxColumn self_id=new DataGridTextBoxColumn();
self_id.HeaderText="本地编号";
self_id.MappingName="self_id";
self_id.Width=70;
self_id.ReadOnly=true;
DataGridTextBoxColumn quotation_id=new DataGridTextBoxColumn();
selected.HeaderText="选择";
selected.MappingName="selected";
selected.Width=70;
selected.ReadOnly=false;
selected.AllowNull=false; //不允许空值
DataGridTextBoxColumn quantity=new DataGridTextBoxColumn();
quantity.HeaderText="数量(万支)";
quantity.MappingName="quantity";
quantity.Width=80;
style.GridColumnStyles.AddRange(new DataGridColumnStyle[]{self_id,selected,quantity});
Datagrid1.TableStyles.Add(style);
*******************************************************************************限制新增加的行
dataGrid1.DataSource=dsQuotation.Tables["c_quotation"].DefaultView;
CurrencyManager cm = (CurrencyManager)BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember];
DataView dv = (DataView) cm.List;
dv.AllowNew = false;
dv.AllowDelete=false;
dv.AllowEdit=false;
*******************************************************************************输入数据然后验证输入
DataGridTextBoxColumn quantity=new DataGridTextBoxColumn();
quantity.HeaderText="数量(万支)";
quantity.MappingName="quantity";
quantity.Width=80;
quantity.Format="f2"; //保留两位小数
quantity.TextBox.Leave+=new System.EventHandler(this.DataGridCell_TextChanged);//add Event
//-------------------------------------------------------------
private void DataGridCell_TextChanged(object sender, System.EventArgs e)
{
TextBox tb=(TextBox)sender;
string txt=tb.Text.Trim();
if(txt==""||txt=="(空)")
{
txt="0";
}
decimal quantity=-1;
try
{
quantity=Convert.ToDecimal(txt);
}
catch{}
if(quantity==-1)
{
MessageBox.Show(" 输入错误,请重新输入!","警告",MessageBoxButtons.OK,MessageBoxIcon.Error);
tb.Focus();
return;
}
}
//**********************************************************************输入数量后,快捷键取不到数值问题?
由于焦点还在当前datagrid的cell,数值没有保存到绑定的dataset中,修改当前cell的焦点就可以了。
在保存操作前面添加如下语句:
if(dsProduct.Tables[0].Rows.Count>0)
{
this.dataGrid1.CurrentCell=new DataGridCell(0,0);
}
2:WinForm Form
如何使Form不显示最大化、最小化、关闭按钮而又显示title
this.ControlBox=false; //控制/系统菜单
屏蔽关闭事件,这样只有调用者才能关闭本页面。
protected override void WndProc(ref System.Windows.Forms.Message m)
{
//const int SC_MINIMIZE = 0xF020;
const int SC_CLOSE = 0xF060;
switch(m.WParam.ToInt32())
{
case SC_CLOSE:
{
break;
}
default:
{
base.WndProc(ref m);
break;
}
}
}
模拟tab键,把焦点赋与下一个控件
this.SelectNextControl(this.ActiveControl,true,true,false,false);
获得键盘事件
private void winform_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if(e.KeyChar==Convert.ToChar(Keys.Enter))
{
button_ok_Click(sender,(EventArgs)e);
}
else if(e.KeyChar==Convert.ToChar(Keys.Escape)||e.KeyChar==Convert.ToChar(Keys.Q))
{
button_cancle_Click(sender,(EventArgs)e);
}
}
一些小技巧,总结了一下,提供给大家