通过DataGrid来更新数据,让用户只能修改已查询出来的结果,但不许增行,该如何实现?
我现在将DataGrid的ReadOnly属性设为false,这样就可以编辑了,但也可以增行,如何禁止增行?

解决方案 »

  1.   

    DataGridView1.AllowUserToAddRows = false; 
    将AllowUserToAddRows 设置为false ;
      

  2.   

       dataGridView.AllowUserToAddRows = false;
      

  3.   

    我用的是VS 2003,用的是DataGrid,不是dataGridView。
      

  4.   

    我的源码如下: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");
      

  5.   

    CurrencyManager hitManager = (CurrencyManager)this.BindingContext[dataGrid1.DataSource, dataGrid1.DataMember];      
     
    ((DataView)hitManager.List).AllowNew = false;
      

  6.   

    //**********************************************************
    // * 控制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;     //是否可编辑 
    }
      

  7.   

    是网格中所有的列都可以编辑吗?如果第1列的主键列不可编辑,GridView.Columns[0].ReadOnly = true;
    那主键列就编辑不了,保存时,也不会多出1行