在datatable中添加row,然后重新绑定到grid

解决方案 »

  1.   

    datatable  dt = dgv.datasource as  datatable
    datarow dr = dt.newRow()
    dt.rows.add(dr);
    dgv.datasource = dt;
      

  2.   

    用下面的语句试过, 没有什么反应. 执行了. 可是不见东西. 行还是那么多行. 
    DataTable dt = dv.DataSource as DataTable;
      DataRow dr = dt.NewRow();
      dt.Rows.Add(dr);
       rowNo = dt.Rows.Count - 1;
    dv.DataSource = dt;
      

  3.   

    你如果没有别的代码控制,新行是不会消失的.
    是否选择行改变事件里重新绑定了数据源?而且绑定datatable后,修改datatable,表格会自动跟着变,不需要再次绑定.
      

  4.   

    在DataGridView的单元格中启用换行
     private void Frm_Main_Load(object sender, EventArgs e)
            {
                dgv_Message.DataSource = new List<Fruit>() {//绑定数据集合
                new Fruit(){Name="鲤鱼",Price=30},
                new Fruit(){Name="鲶鱼",Price=40},
                new Fruit(){Name="泥鳅",Price=33},
                new Fruit(){Name="白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼白鲢鱼"
                    ,Price=31}};//CodeGo.net/
                dgv_Message.Columns[0].Width = 200;//设置列宽度
                dgv_Message.Columns[1].Width = 170;//设置列宽度
                dgv_Message.Columns[0].DefaultCellStyle.Alignment =//设置对齐方式
                    DataGridViewContentAlignment.MiddleCenter;
                dgv_Message.DefaultCellStyle.WrapMode = //换行显示过长文本内容
                    DataGridViewTriState.True;
                dgv_Message.Rows[3].Height = 30;//设置行高度
            }
      

  5.   

    我没有做任何处理.  全部代码在这里:
    第一种情况: 我直接在多出的新行中输入资料, 光标移到其他行后该新行自动消失. 
    第二种情况: 点击button1, 没有反应. 实际跟踪代码是执行了的.  重不重新绑定都是一样. using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Common;
    namespace ErpCore
    {
        public partial class wf_invt_saveqty : Form
        {
            public wf_invt_saveqty()
            {
                InitializeComponent();
            }
            protected override void OnLoad(EventArgs e)
            {
                base.OnLoad(e);
                int id = tv_1.AddNode(null, "type","物料类型", "%");
                tv_1.AddNodes( "GetItemType", "type_Name", "type",tv_1.Nodes[id]);
                tv_1.AddChildNode(tv_1.Nodes[id], 1, "GetPaperType", "name", "code");
                GetInvtSaveQty(); 
            }         
            private void GetInvtSaveQty()
            {
                DataTable dt = DBUtility.ReportSQL.GetInvtSaveQty("%", "%");
                dv_1.DataSource = dt;
                dv_1.AutoSetHeaderText("invt_saveqty");
                dv_1.Columns["itemtype"].Visible = false;
                dv_1.Columns["papertype"].Visible = false;
                dv_1.Columns["id"].Visible = false;
                string[] noeditcols = { "userid","inputdate"};
                ShowRowNumber();
            }        private void ShowRowNumber()
            {
                for (int i = 0; i < dv_1.RowCount; i++)
                {
                    dv_1.Rows[i].HeaderCell.Value = (i+1).ToString();
                }
            }        private void tv_1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                DataTable dt = dv_1.DataSource as DataTable ;
                DataView dv = dt.DefaultView;
                if (e.Node is Common.TreeViewItem)
                {
                    Common.TreeViewItem item = e.Node as Common.TreeViewItem ;
                    string type = item.GetItem("type");
                    string code = item.GetItem("code");
                    if (type == string.Empty) type = "%";
                    if (code == string.Empty) code = "%";
                    dv.RowFilter = "itemtype like '" + type + "' and papertype like '" + code + "'";
                    ShowRowNumber();
                }        }        private void button1_Click(object sender, EventArgs e)
            {
               // dv_1.AddRow();
                
                DataTable dt = dv_1.DataSource as DataTable;
                DataRow dr = dt.NewRow();
                dt.Rows.Add(dr);
                int rowNo = dt.Rows.Count - 1;
                // dv.DataSource = null ;
                //dv_1.DataSource = dt;        }        private void button2_Click(object sender, EventArgs e)
            {
                DataTable dt = dv_1.DataSource as DataTable;
                string info = DBUtility.DbHelper.Update(dt, DBUtility.UpdateWhereClause.BykeyOnly);
                MessageBox.Show(info);
            }
        }
    }
      

  6.   

    你列什么都没添加当然是空行啊DataTable dt = dgv.DataSource as DataTable;
    DataRow dr = dt.NewRow();
    dr["列名"] = "你的数据";
    dt.Rows.Add(dr);
    dgvt.DataSource = dt;
      

  7.   

    唉, 不是这个问题, 有空行不怕, 问题是当在空行中输入资料后, 光标移走后, 这一行又没了. 
    就算上面代码我加上了
     dr["itemtype"] = "A";
      dr["papertype"] = "B";
    也是一样不行的
      

  8.   

    你把dt定义成全局的,然后后面全部去访问dt
    而不是用完销毁,再用又上dgv.DataSource里去找.还有ShowRowNumber();里面代码到底是什么,每次AfterSelect都执行
      

  9.   

    不好意思,看漏了,显示行号的代码应该没问题.
    你先把AfterSelect里的代码去掉,再试.
    只能是这里有问题
      

  10.   

    说实话dv.RowFilter = "itemtype like '" + type + "' and papertype like '" + code + "'";这个到底要干什么我完全没看懂
    dv排完序就丢弃了,没有绑定回表格上