DataGrid不许增行 通过DataGrid来更新数据,让用户只能修改已查询出来的结果,但不许增行,该如何实现?我现在将DataGrid的ReadOnly属性设为false,这样就可以编辑了,但也可以增行,如何禁止增行? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataGridView1.AllowUserToAddRows = false; 将AllowUserToAddRows 设置为false ; dataGridView.AllowUserToAddRows = false; 我用的是VS 2003,用的是DataGrid,不是dataGridView。 我的源码如下:string query="select c_code,custcode,custpart,custpartname,res from fg_custitem where custcode='170082' "; DataSet ds_query=db.Query (query); // 添加这一句也不可以。ds_query.Tables ["ds"].DefaultView.AllowNew =false; this.dataGrid1.SetDataBinding(ds_query,"ds"); CurrencyManager hitManager = (CurrencyManager)this.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember]; ((DataView)hitManager.List).AllowNew = false; //********************************************************** // * 控制Grid样式,参数说明: // * Datagrid:为要控制的datagrid // * DataTable :做为DataGrid的数据源 // * FrmName :datagrid所在的窗体名称 // * Allowsorting:是否可用DataGrid排序 // * AllowAddNew :是否可自动增加一行 // * _right :权限 public void SetGridStyleDataSouce_New(DataGrid Dg,DataTable Tb,string FrmName, bool AllowSorting,bool AllowAdd,int _right,string type,bool dg_readonly) { string right; if(_right==1) { right="Y"; } else { right="N"; } Dg.ReadOnly=dg_readonly; DataGridTableStyle Dt=new DataGridTableStyle(); Tb.DefaultView.AllowDelete=true; Tb.DefaultView.AllowNew=AllowAdd;//是否可自动增长 Dg.TableStyles.Clear(); Dg.DataSource=Tb;//.DefaultView;//设置DataGrid的数据源 Dt.MappingName=Tb.TableName; int ColNum=Tb.Columns.Count;//得到Tb的列数 for(int i=0;i<ColNum;i++)////重绘所有的列 { DataGridTextBoxColumn 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时转成空 switch(FrmName) { case "Frm": switch(Tb.Columns[i].ColumnName) { case "Cost": { if(right=="Y") { Dt.PreferredColumnWidth=50; } else { Dt.PreferredColumnWidth=0; } break; } case "Unit": { Dt.PreferredColumnWidth=20; break; } case "BarCode": { Dt.PreferredColumnWidth=80; break; } case "PackQty": { Dt.PreferredColumnWidth=40; break; } break; } } Dt.GridColumnStyles.Add(Db);//增加样式 Db.Dispose(); } Dt.AllowSorting=AllowSorting;//是否可排序 Dg.TableStyles.Add(Dt); //DATAGRID增加一种样式 } public void SetGridColumnReadOnly( DataGrid Dg, DataTable Tb , string FrmName ) //控制列是否为只读 { DataColumnCollection myDataColumns; myDataColumns = Tb.Columns; Dg.TableStyles[Tb.TableName].GridColumnStyles["BRAND"].ReadOnly = true; Dg.TableStyles[Tb.TableName].GridColumnStyles["DESCRIPTION"].ReadOnly = true; } public TextBox GetTextBoxName(DataGrid Dg,int ColumnNumber) //返回当前GridTextBox的名字 { DataGridTextBox myGridTextBox; DataGridTextBoxColumn myColumnTextColumn; myColumnTextColumn = (DataGridTextBoxColumn) Dg.TableStyles[0].GridColumnStyles[ColumnNumber]; myGridTextBox = (DataGridTextBox) myColumnTextColumn.TextBox; if(myGridTextBox.Name=="Price" && Cs.ReturnBarCode(myGridTextBox.Text)==false) { if(Microsoft.VisualBasic.Information.IsNumeric(myGridTextBox.Text) ) { if(Dg.Name=="PO_Datagrid") { myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),4)).ToString(); } else { myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),3)).ToString(); } } } if(myGridTextBox.Name=="Amount" ) { if(Microsoft.VisualBasic.Information.IsNumeric( myGridTextBox.Text)) { myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),1)).ToString(); } } return myGridTextBox; } public void SetTextBoxFocus(DataGrid Dg,int RowNumber,string TextName) //设置GridTextBox的某单元格得到焦点 { DataGridTextBox myGridTextBox; DataGridTextBoxColumn myColumnTextColumn; Dg.CurrentRowIndex=RowNumber; for(int i=0;i<((DataTable) Dg.DataSource).Columns.Count-1;i++) { myColumnTextColumn = (DataGridTextBoxColumn) Dg.TableStyles[0].GridColumnStyles[i]; myGridTextBox = (DataGridTextBox) myColumnTextColumn.TextBox; if(myGridTextBox.Name==TextName) { myGridTextBox.Focus(); myGridTextBox.SelectAll(); } } } } public class ChinessGridHead//中文表格列名 { public string ChinessText;//中文列名 public int Width; //列宽 public bool IsVisual; //是否可见 public bool IsEdit; //是否可编辑 } 是网格中所有的列都可以编辑吗?如果第1列的主键列不可编辑,GridView.Columns[0].ReadOnly = true;那主键列就编辑不了,保存时,也不会多出1行 SQL查询二维表 Enterprise Library 的App.config中连接字符串加密的问题(在线等) 紧急高分求助+散分:为什么winform的菜单项只能用一次? 看一下这种C#代码是什么意思啊?(类的定义) vs2005中一些控件的受保护属性怎么使用啊 删除文件的问题 Asp.net 2.0 中GridView 如何固定一个ColumnHeader的宽度 请教 在Asp.Net下 的方法? Web控件如何屏蔽网页弹窗 为什么我装了win2003后不能访问asp.net页面? 怎么调试window服务程序?? 求教反编译的问题
将AllowUserToAddRows 设置为false ;
DataSet ds_query=db.Query (query);
// 添加这一句也不可以。ds_query.Tables ["ds"].DefaultView.AllowNew =false;
this.dataGrid1.SetDataBinding(ds_query,"ds");
((DataView)hitManager.List).AllowNew = false;
// * 控制Grid样式,参数说明:
// * Datagrid:为要控制的datagrid
// * DataTable :做为DataGrid的数据源
// * FrmName :datagrid所在的窗体名称
// * Allowsorting:是否可用DataGrid排序
// * AllowAddNew :是否可自动增加一行
// * _right :权限
public void SetGridStyleDataSouce_New(DataGrid Dg,DataTable Tb,string FrmName, bool AllowSorting,bool AllowAdd,int _right,string type,bool dg_readonly)
{
string right;
if(_right==1)
{
right="Y";
}
else
{
right="N";
}
Dg.ReadOnly=dg_readonly;
DataGridTableStyle Dt=new DataGridTableStyle();
Tb.DefaultView.AllowDelete=true;
Tb.DefaultView.AllowNew=AllowAdd;//是否可自动增长
Dg.TableStyles.Clear();
Dg.DataSource=Tb;//.DefaultView;//设置DataGrid的数据源
Dt.MappingName=Tb.TableName;
int ColNum=Tb.Columns.Count;//得到Tb的列数
for(int i=0;i<ColNum;i++)////重绘所有的列
{
DataGridTextBoxColumn 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时转成空
switch(FrmName)
{
case "Frm":
switch(Tb.Columns[i].ColumnName)
{
case "Cost":
{
if(right=="Y")
{
Dt.PreferredColumnWidth=50;
}
else
{
Dt.PreferredColumnWidth=0;
}
break;
}
case "Unit":
{
Dt.PreferredColumnWidth=20;
break;
}
case "BarCode":
{
Dt.PreferredColumnWidth=80;
break;
}
case "PackQty":
{
Dt.PreferredColumnWidth=40;
break;
} break;
}
}
Dt.GridColumnStyles.Add(Db);//增加样式
Db.Dispose();
}
Dt.AllowSorting=AllowSorting;//是否可排序
Dg.TableStyles.Add(Dt); //DATAGRID增加一种样式
}
public void SetGridColumnReadOnly( DataGrid Dg, DataTable Tb , string FrmName ) //控制列是否为只读
{
DataColumnCollection myDataColumns;
myDataColumns = Tb.Columns;
Dg.TableStyles[Tb.TableName].GridColumnStyles["BRAND"].ReadOnly = true;
Dg.TableStyles[Tb.TableName].GridColumnStyles["DESCRIPTION"].ReadOnly = true;
}
public TextBox GetTextBoxName(DataGrid Dg,int ColumnNumber) //返回当前GridTextBox的名字
{
DataGridTextBox myGridTextBox;
DataGridTextBoxColumn myColumnTextColumn;
myColumnTextColumn = (DataGridTextBoxColumn) Dg.TableStyles[0].GridColumnStyles[ColumnNumber]; myGridTextBox = (DataGridTextBox) myColumnTextColumn.TextBox;
if(myGridTextBox.Name=="Price" && Cs.ReturnBarCode(myGridTextBox.Text)==false)
{
if(Microsoft.VisualBasic.Information.IsNumeric(myGridTextBox.Text) )
{
if(Dg.Name=="PO_Datagrid")
{
myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),4)).ToString();
}
else
{
myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),3)).ToString();
}
}
}
if(myGridTextBox.Name=="Amount" )
{
if(Microsoft.VisualBasic.Information.IsNumeric( myGridTextBox.Text))
{
myGridTextBox.Text=(Math.Round(Decimal.Parse(myGridTextBox.Text),1)).ToString();
}
}
return myGridTextBox;
}
public void SetTextBoxFocus(DataGrid Dg,int RowNumber,string TextName) //设置GridTextBox的某单元格得到焦点
{
DataGridTextBox myGridTextBox;
DataGridTextBoxColumn myColumnTextColumn;
Dg.CurrentRowIndex=RowNumber;
for(int i=0;i<((DataTable) Dg.DataSource).Columns.Count-1;i++)
{
myColumnTextColumn = (DataGridTextBoxColumn) Dg.TableStyles[0].GridColumnStyles[i];
myGridTextBox = (DataGridTextBox) myColumnTextColumn.TextBox;
if(myGridTextBox.Name==TextName)
{
myGridTextBox.Focus();
myGridTextBox.SelectAll();
}
}
}
}
public class ChinessGridHead//中文表格列名
{
public string ChinessText;//中文列名
public int Width; //列宽
public bool IsVisual; //是否可见
public bool IsEdit; //是否可编辑
}
那主键列就编辑不了,保存时,也不会多出1行