c#做winform程序有什么表格控件可以输入吗? 以前用VB做程序,有PSPREAD那样的类似EXCEL的表格控件可以输入用,再不济也可用MSFlexGrid与Text控件结合来用作输入,那在C#中有类似用途的控件吗?c#中的datagrid恐怕不能自由输入编辑吧? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自带的datagrid当然可以做到自由输入了用下面的代码就行public void SetGridStyleDataSouce_New(DataGrid Dg,DataTable Tb,string FrmName, bool AllowSorting,bool AllowAdd,string type,bool dg_readonly) { Dg.ReadOnly=dg_readonly; DataGridTableStyle Dt=new DataGridTableStyle(); DataGridTextBoxColumn Db; Tb.DefaultView.AllowNew=AllowAdd;//是否可自动增长 if (Dg.TableStyles.Count>0)//如果此DataGrid已经存在一种样式则删除此样式 { Dg.TableStyles.Remove(Dg.TableStyles[0]); //删除样式 } Dg.DataSource=Tb;//设置DataGrid的数据源 Dt.MappingName=Tb.TableName; int ColNum=Tb.Columns.Count;//得到Tb的列数 for(int i=0;i<ColNum;i++)////重绘所有的列 { Db=new DataGridTextBoxColumn(); Db.TextBox.Name=Tb.Columns[i].ColumnName;//设置每一列的名字 注:为中文名 Db.HeaderText=Tb.Columns[i].ColumnName;//设置每一列的列头为中文名 Db.MappingName=Tb.Columns[i].ColumnName; Db.NullText="";//当Textbox为Null时转成空 Db.TextBox.DoubleClick += new EventHandler(TextBoxDoubleClickHandler); switch(Tb.Columns[i].ColumnName) { case "a": Dt.PreferredColumnWidth= 60; break; case "b": Dt.PreferredColumnWidth= 50; break; case "c": Dt.PreferredColumnWidth= 100; break; } Dt.GridColumnStyles.Add(Db);//增加样式 } Dt.AllowSorting=AllowSorting;//是否可排序 Dg.TableStyles.Add(Dt); //DATAGRID增加一种样式 }protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg , System.Windows.Forms.Keys keyData) //激活回车键 { int WM_KEYDOWN=256; int WM_SYSKEYDOWN = 260; Da.GridControl Dc=new Da.GridControl(); if(this.ActiveControl is System.Windows.Forms.DataGridTextBox ) { if(msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN) { switch( keyData) { //case Keys.Down: // //MsgBox("截到下箭头键") // MessageBox.Show("下键"); // return true; // break; //case Keys.Up: // //MsgBox("截到上箭头键") // MessageBox.Show("上键"); // return true; case Keys.Delete: //QuoteDetail.Rows[dataGrid1.CurrentCell.RowNumber].Delete(); // QuoteDetail.AcceptChanges(); break; case Keys.Enter: if(CheckDataGrid(this.dataGrid1) ==true) { switch (Dc.GetTextBoxName(dataGrid1,dataGrid1.CurrentCell.ColumnNumber).Name.ToString()) { case "型号代码": SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); break; case "数量": SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); break; case "价格": SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); break; case "交货期": //SendKeys.Send("{Down}"); SendKeys.Send("{Right}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); SendKeys.Send("{Tab}"); break; default: SendKeys.Send("{Tab}"); break; } } return true; //break; //case Keys.Control + Keys.V: // //<CTRL> + C 组合键) // //if( Me.ActiveControl.Parent.GetType Is GetType(DataGrid) And Me.Txt_Type.Text <> "CHAO HUO" Then // // keyData = Keys.NoName // //End If // return true; // break; //case Keys.Alt + Keys.Z:// 'MsgBox("<ALT> + z 组合键被截获") // return true; // break; } } } return false; } TO: cansum396(沉觉不醒) ,我不知道您的代码怎么用啊?拷贝到程序中后出好几个编译错误.我只是想让winform中的datagrid能像EXCEL那样随意输入,怎么做呢.我初学C#,您能讲得详细些吗? vs2005中的DataGridView 还可以 我用的是vs2003,没有datagridview,听人说vs2005不太好用啊,没敢装 说数据结构重要的出几个实际开发中用到的问题,看看不懂数据结构的我会不会 .net打印 winform的(看有大神不) 一个比较难弄的问题,希望大家帮一下我!!!! 将object类型转换成引用类型不是拆箱吗???? object = null 有什么作用? 字符串处理 求各位大牛帮帮忙啊、、 大家帮忙参考一下 , 我报考哪个专业好 ? 这个SQL数据库里的表要怎样写约束呢? SoCket Receive方法问题,在线等,请高手指点 高分求局域网聊天程序源代码 Delphi写的DLL,C#调用中参数返回问题?
用下面的代码就行
public void SetGridStyleDataSouce_New(DataGrid Dg,DataTable Tb,string FrmName, bool AllowSorting,bool AllowAdd,string type,bool dg_readonly)
{
Dg.ReadOnly=dg_readonly;
DataGridTableStyle Dt=new DataGridTableStyle();
DataGridTextBoxColumn Db;
Tb.DefaultView.AllowNew=AllowAdd;//是否可自动增长
if (Dg.TableStyles.Count>0)//如果此DataGrid已经存在一种样式则删除此样式
{
Dg.TableStyles.Remove(Dg.TableStyles[0]); //删除样式
}
Dg.DataSource=Tb;//设置DataGrid的数据源
Dt.MappingName=Tb.TableName; int ColNum=Tb.Columns.Count;//得到Tb的列数
for(int i=0;i<ColNum;i++)////重绘所有的列
{
Db=new DataGridTextBoxColumn();
Db.TextBox.Name=Tb.Columns[i].ColumnName;//设置每一列的名字 注:为中文名
Db.HeaderText=Tb.Columns[i].ColumnName;//设置每一列的列头为中文名
Db.MappingName=Tb.Columns[i].ColumnName;
Db.NullText="";//当Textbox为Null时转成空
Db.TextBox.DoubleClick += new EventHandler(TextBoxDoubleClickHandler);
switch(Tb.Columns[i].ColumnName)
{
case "a":
Dt.PreferredColumnWidth= 60;
break;
case "b":
Dt.PreferredColumnWidth= 50;
break;
case "c":
Dt.PreferredColumnWidth= 100;
break;
}
Dt.GridColumnStyles.Add(Db);//增加样式
}
Dt.AllowSorting=AllowSorting;//是否可排序
Dg.TableStyles.Add(Dt); //DATAGRID增加一种样式
}
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg , System.Windows.Forms.Keys keyData) //激活回车键
{
int WM_KEYDOWN=256;
int WM_SYSKEYDOWN = 260;
Da.GridControl Dc=new Da.GridControl();
if(this.ActiveControl is System.Windows.Forms.DataGridTextBox )
{
if(msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)
{
switch( keyData)
{ //case Keys.Down:
// //MsgBox("截到下箭头键")
// MessageBox.Show("下键");
// return true;
// break;
//case Keys.Up:
// //MsgBox("截到上箭头键")
// MessageBox.Show("上键");
// return true;
case Keys.Delete:
//QuoteDetail.Rows[dataGrid1.CurrentCell.RowNumber].Delete();
// QuoteDetail.AcceptChanges();
break;
case Keys.Enter:
if(CheckDataGrid(this.dataGrid1) ==true)
{
switch (Dc.GetTextBoxName(dataGrid1,dataGrid1.CurrentCell.ColumnNumber).Name.ToString())
{
case "型号代码":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "数量":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "价格":
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
case "交货期":
//SendKeys.Send("{Down}");
SendKeys.Send("{Right}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
SendKeys.Send("{Tab}");
break;
default:
SendKeys.Send("{Tab}");
break;
}
}
return true;
//break;
//case Keys.Control + Keys.V:
// //<CTRL> + C 组合键)
// //if( Me.ActiveControl.Parent.GetType Is GetType(DataGrid) And Me.Txt_Type.Text <> "CHAO HUO" Then
// // keyData = Keys.NoName
// //End If // return true;
// break;
//case Keys.Alt + Keys.Z:// 'MsgBox("<ALT> + z 组合键被截获")
// return true;
// break;
}
}
}
return false;
}