win DataGrid 怎样实现单行编辑 windows 控件DataGrid要么全是只读的,要么所有的行都能编辑,能不能实现只让指定的行进行编辑,其他的行都是只读的呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不会吧,DataGrid做得怎么笨啊,DataGrid我得不到行的属性,只能得到单元格的 winform里是不怎么好用,通过DataSource来操纵试试 不行的,因为只读属性是给Column加的 to windows 控件DataGrid要么全是只读的,要么所有的行都能编辑,能不能实现只让指定的行进行编辑,其他的行都是只读的呢?How can I prevent a particular cell from being editablehttp://www.syncfusion.com/faq/windowsforms/Search/758.aspx 可以用DataView作为数据源,然后当状态为编辑状态时,锁定鼠标在当前编辑行. 1. 把DataGrid 的 ReadOnly 设置成true.2. 在需要编辑的时候,把ReadOnly改成false.3. 在DataGrid 的 CurrentCell事件中判断是不是在编辑行。如果不是,则将CurrentCell移动回来。4. 为了达到3的目的,你需要在2的时候设置一个类级别的成员,记录当前编辑行的行号。 可以做到,在要编辑的单元格后面隐藏一个文本框(style自己设置),当鼠标进入或者鼠标按下的时候,将单元格的值copy到文本框里,让文本框显示,这时可以编辑,更新之后再回到编辑之前的状态! 编辑之后需要重新bind一下 To ClementDik(剑问天): 在DataGrid 的 CurrentCell事件中判断是不是在编辑行。如果不是,则将CurrentCell移动回来。在哪个事件中怎样把单元格移回来?_CurrentCellChanged(object sender, System.EventArgs e) DataGridTableStyle ts = new DataGridTableStyle();//设置表格模式DataGridTextBoxColumn aColumnTextColumn;ts.AllowSorting = false;ts.AlternatingBackColor = Color.LightGray; //交替显示ts.MappingName = newTable.TableName;int numCols = newTable.Columns.Count;for (int i = 0;i< numCols;i++){aColumnTextColumn = new DataGridTextBoxColumn() if( i==0 ) {aColumnTextColumn.ReadOnly=true;}if ( i == 1 )//当鼠标单击列时允许响应{aColumnTextColumn.TextBox.MouseDown += new MouseEventHandle(TextBoxMouseDownHandler); }......aColumnTextColumn.MappingName = newTable.Columns[i].ColumnName;aColumnTextColumn.HeaderText = newTable.Columns[i].ColumnName;aColumnTextColumn.NullText = "";aColumnTextColumn.Format = "N"; //设置为数字格式显示ts.GridColumnStyles.Add(aColumnTextColumn);}this.dataGrid1.TableStyles.Add(ts); dgrContect.CurrentCell=new DataGridCell(dsContect.Tables[0].Rows.Count,0); 谢谢各位了,呵呵DataGrid做得不好,很多地方和功能都需要进行限制,还得自己写。十分感谢大家的帮助! c#中设置用户名登录界面的enter键自动登录的功能 C#如何读取这种XML文件? 如何让WPF的所有窗口继承一个公共的类? 二维数组~~~高手进! iphone 模拟器 请教网络的问题 求救:如何把一个窗体form包含在一个面板panel内? 小弟初学C#《C#完全手册中文版电子书 》这本书怎么样 讨厌的方法返回类型!!——求字符串、数组高手! 不是合法的OleAut日期? 对于字体font。。。如何存储呢? 取出之后如何转换成font...如何序列化??? 强行关闭任务栏所有整在运得的程序???
http://www.syncfusion.com/faq/windowsforms/Search/758.aspx
2. 在需要编辑的时候,把ReadOnly改成false.
3. 在DataGrid 的 CurrentCell事件中判断是不是在编辑行。如果不是,则将CurrentCell移动回来。
4. 为了达到3的目的,你需要在2的时候设置一个类级别的成员,记录当前编辑行的行号。
当鼠标进入或者鼠标按下的时候,将单元格的值copy到文本框里,让文本框显示,这时可以编辑,
更新之后再回到编辑之前的状态!
DataGridTextBoxColumn aColumnTextColumn;
ts.AllowSorting = false;
ts.AlternatingBackColor = Color.LightGray; //交替显示
ts.MappingName = newTable.TableName;
int numCols = newTable.Columns.Count;
for (int i = 0;i< numCols;i++)
{
aColumnTextColumn = new DataGridTextBoxColumn()
if( i==0 )
{
aColumnTextColumn.ReadOnly=true;
}
if ( i == 1 )//当鼠标单击列时允许响应
{
aColumnTextColumn.TextBox.MouseDown += new MouseEventHandle(TextBoxMouseDownHandler);
}
......
aColumnTextColumn.MappingName = newTable.Columns[i].ColumnName;
aColumnTextColumn.HeaderText = newTable.Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "N"; //设置为数字格式显示
ts.GridColumnStyles.Add(aColumnTextColumn);
}
this.dataGrid1.TableStyles.Add(ts);