求助winfrom,控件DataGridView如何实时更新一行数据,而不是插入新行。

这也不能运行不是吧 2021-04-17 06:16:17

如上图,在插入4行或者n行数据后,相同标识的行,不再插入,而是更新该标识行的数据。(标识唯一,标识为1、2、3.....)
private void Page_Channel_Load(object sender, EventArgs e)
{
uiDataGridView1.AddColumn("序号", "Column1").SetFixedMode(70);
uiDataGridView1.AddColumn("Station", "Column2");
uiDataGridView1.AddColumn("ECD(us)", "Column3");
uiDataGridView1.AddColumn("FLD(dBuV)", "Column4");
uiDataGridView1.AddColumn("Tran(us)", "Column5");
uiDataGridView1.AddColumn("Base(us)", "Column6");
uiDataGridView1.AddColumn("1SkyFLD", "Column7");
uiDataGridView1.AddColumn("1Delay(us)", "Column8");
uiDataGridView1.AddColumn("2SkyFLD", "Column9");
uiDataGridView1.AddColumn("2Delay(us)", "Column10");

uiDataGridView1.ReadOnly = true;
}

public class Data
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
public string Column6 { get; set; }
public string Column7 { get; set; }
public string Column8 { get; set; }
public string Column9 { get; set; }
public string Column10 { get; set; }

public override string ToString()
{
return Column1;
}
}

//更新DataGridView的函数,
public void Update_chain_Info(LSCHM_Decode_T chain_info)
{
DataGridViewRow row = new DataGridViewRow();

row.CreateCells(uiDataGridView1);
//num为唯一标识符,如果标识符相同,则更新该行数据,而不是插入新行
row.Cells[0].Value = num.ToString();
row.Cells[1].Value = chain_info.period + " " + chain_info.state;
row.Cells[2].Value = chain_info.ecd;
row.Cells[3].Value = chain_info.fld;
row.Cells[4].Value = chain_info.transport_delay;
row.Cells[5].Value = chain_info.base_delay;
row.Cells[6].Value = chain_info.one_sky_fld;
row.Cells[7].Value = chain_info.one_sky_delay;
row.Cells[8].Value = chain_info.two_sky_delay;
row.Cells[9].Value = chain_info.two_sky_fld;
uiDataGridView1.Rows.Add(row);

}


如果这样写又报错

求大神们帮忙给点思路什么的,或者参考例程,不管什么都可以,感谢感谢大家!
...全文
1729 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxingway 2021-04-21
  • 打赏
  • 举报
回复
先修改数据源再更新啊 可以把数据源的类型改成List<Model>,用List.Find找到那行数据,修改后再 this.dataGridView1.DataSource = lst;
引用 10 楼 wang_peng 的回复:
不建议操作,DataGridView1.Rows,挺麻烦的事。直接操作datatable, 你现在要学习的就是怎么操作datatable,给你一个思路 DataTable dt = new DataTable(); dt.Columns.Add("col", typeof(int)); //假如dt里有数据 this.dataGridView1.DataSource = dt; //添加数据 DataRow dataRow = dt.NewRow(); dataRow[0] = 1; dt.Rows.Add(dataRow); //修改数据 dt.Rows[0].ItemArray = new object[] { 2 }; //删除数据 dt.Rows.RemoveAt(0); //最后这句,即更新datatable及datagrid界面的内容 dt.AcceptChanges();
90e家 2021-04-21
  • 打赏
  • 举报
回复
引用 13 楼 这也不能运行不是吧 的回复:
引用 11 楼 90e家 的回复:
BindingList<> 更具有优势,相比较list,另外无论是添加或者更新,先去用主键做查询不就知道了么?集合都支持lamda表达式的,直接list.firstordefault ,r默认如果没有就添加,如果有就是更新
第一次听,BindingList<>偶去搜搜怎么使用。非常感谢提供新思路
datasouce绑定的可以是list也可以bindinglist 或者datatable都是一样的,bindnglist可以更灵活的修改数据
morliz子轩 2021-04-21
  • 打赏
  • 举报
回复
嗯,不客气。
KnightWelling 2021-04-21
  • 打赏
  • 举报
回复
小兄弟很萌啊
  • 打赏
  • 举报
回复
引用 9 楼 morliz子轩 的回复:
当Update或Insert值之后,需要写入数据源。一般数据源是泛型,比如下面的demo是List<BranJob>,是往DB方向读写的。 你要做的事情,就是Update或Insert将值写入数据源之后,要进行Dgv重置,重载数据源。 而重载数据源,涉及到三个部分: 1、数据源表,可以为DataTable,也可以是泛型,当然也可以是象你这样,以DataRow或DataGridViewRow类型向dgv来插入。 2、Dgv表头,也就是表的列头可以重新装载,也可以不清空(这句:DgvJob.Columns.Clear();),一般来讲,重载表头一般是有对表样式重新配置的需求。(也就是Rows、Columns或Cells的DefaultCellStyle属性,当然也可以给全表配置一个默认样式,如:dgv.DefaultCellStyle) 3、事件的订阅和撤销。这部分的东西就非常多了。如果是后台逻辑来处理行、单元格值的更新或插入,那可以忽略。象你写的就是这种情况

         ///Dgv数据源重置
        /// <summary>
        /// 重置DgvJob对象
        /// </summary>
        private void ResetDgvJobSet()
        {
            //清空
            DgvJob.DataSource = null;
            DgvJob.Rows.Clear();
            DgvJob.Columns.Clear();

            //复位
            //DgvJob.SelectionMode = DataGridViewSelectionMode.CellSelect;
            //DgvJob.CellMouseClick -= new DataGridViewCellMouseEventHandler(DgvJob_CellMouseClick);

            //重载
            DgvJob.AllowUserToAddRows = false;
            DataGridViewHelper.InitDgvJobFace(ref DgvJob);
            InitDgvData(DgvJob);
        }

/// <summary>
/// DataGridView控件辅助类
/// </summary>
public class DataGridViewHelper
{
public static DataGridView InitDgvJobFace(ref DataGridView dgv)
        {
            //【BranJob】列初始化
            DataGridViewCheckBoxColumn multiselect = CreateCheckColumn("multiselect", "选择");

            DataGridViewTextBoxColumn id = CreateTextBoxColumn("id", "内码标识", "BranjobId", false);
            DataGridViewComboBoxColumn jobna = CreateComboBoxColumn("jobna", "职位名称", "Jobno");
            SetAlternateChoicesUsingItems(jobna);

            DataGridViewTextBoxColumn planqty = CreateTextBoxColumn("planqty", "定编人数", "Planqty");

            DataGridViewTextBoxColumn jobqty = CreateTextBoxColumn("jobqty", "实际人数", "Jobqty");
            DataGridViewTextBoxColumn lackqty = CreateTextBoxColumn("lackqty", "欠缺人数", "Lackqty");

            DataGridViewTextBoxColumn overtime = CreateTextBoxColumn("overtime", "固定加班小时", "Overtime");
            //overtime.DefaultCellStyle = CellStyle(CellStyleState.decimalCellStyle);

            //添加到DataGridView对象
            DgvJob.Columns.AddRange(new DataGridViewColumn[]
            {
                id,
                jobna,
                planqty,
                jobqty,
                lackqty,
                overtime
            });
            //插入多选[列]
            DgvJob.Columns.Insert(0, multiselect);
            InitDgv(DgvJob);

            return DgvJob;
        }

/// <summary>
        /// 初始化Dgv格式样式
        /// </summary>
        /// <param name="dgv"></param>
        private static void InitDgv(DataGridView dgv)
        {
            dgv.EnableHeadersVisualStyles = false;
            dgv.AutoGenerateColumns = false;
            //dgv.RowHeadersVisible = false;
            //默认单元格样式
            //dgv.DefaultCellStyle = CellStyle(CellStyleState.textCellStyle);
            //默认行标题样式
            //dgv.RowHeadersDefaultCellStyle = CellStyle(CellStyleState.rowHeaderCellStyle);

            dgv.RowTemplate.Height = 23;     //默认行高
            dgv.AllowUserToAddRows = false;     //禁止新增列
            dgv.EditMode = DataGridViewEditMode.EditOnEnter;
            dgv.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;    //列标题居中
            //dgv.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            //列顺序调整
            dgv.AllowUserToOrderColumns = false;
        }

        /// <summary>
        /// 创建基于DataGridView文本控件
        /// </summary>
        /// <param name="TextName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldName">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewTextBoxColumn CreateTextBoxColumn(string TextName, string HeaderCaption, string DataFieldName, bool visible = true)
        {
            DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn()
            {
                Name = TextName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldName,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                ReadOnly = true,
                Visible = visible
            };
            return column;
        }

        /// <summary>
        /// 创建基于DataGridView下拉列表控件
        /// </summary>
        /// <param name="CmbBoxName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldName">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewComboBoxColumn CreateComboBoxColumn(string CmbBoxName, string HeaderCaption, string DataFieldName)
        {
            DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn()
            {
                Name = CmbBoxName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldName,
                FlatStyle = FlatStyle.Popup,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                ReadOnly = true
            };

            return column;
        }

        /// <summary>
        /// 创建基于DataGridView多选CheckBox控件
        /// </summary>
        /// <param name="ChkName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldname">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewCheckBoxColumn CreateCheckColumn(string ChkName, string HeaderCaption, string DataFieldname = null)
        {
            DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn()
            {
                Name = ChkName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldname,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                TrueValue = false,
                ReadOnly = true,

                AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
                FlatStyle = FlatStyle.Standard,
                CellTemplate = new DataGridViewCheckBoxCell()
            };
            column.CellTemplate.Style.BackColor = Color.Beige;

            return column;
        }
}
非常感谢,这么多代码,我保存下来仔细学习学习。再次感谢
  • 打赏
  • 举报
回复
引用 11 楼 90e家 的回复:
BindingList<> 更具有优势,相比较list,另外无论是添加或者更新,先去用主键做查询不就知道了么?集合都支持lamda表达式的,直接list.firstordefault ,r默认如果没有就添加,如果有就是更新
第一次听,BindingList<>偶去搜搜怎么使用。非常感谢提供新思路
  • 打赏
  • 举报
回复
引用 10 楼 wang_peng 的回复:
不建议操作,DataGridView1.Rows,挺麻烦的事。直接操作datatable, 你现在要学习的就是怎么操作datatable,给你一个思路 DataTable dt = new DataTable(); dt.Columns.Add("col", typeof(int)); //假如dt里有数据 this.dataGridView1.DataSource = dt; //添加数据 DataRow dataRow = dt.NewRow(); dataRow[0] = 1; dt.Rows.Add(dataRow); //修改数据 dt.Rows[0].ItemArray = new object[] { 2 }; //删除数据 dt.Rows.RemoveAt(0); //最后这句,即更新datatable及datagrid界面的内容 dt.AcceptChanges();
非常感谢,使用你分享的方法,已经能完成我的需求。感谢
        bool isupdate = false;
        int maxline = 0;
        int maxline_record = 0;
        bool isrecord = true;

        public void Update_chain_Info(LSCHM_Decode_T chain_info)
        {
		DataRow dr = dt.NewRow();
            dr[0] = num;
            dr[1] = chain_info.period + " " + chain_info.state;
            dr[2] = chain_info.ecd;
            dr[3] = chain_info.fld;
            dr[4] = chain_info.transport_delay;
            dr[5] = chain_info.base_delay;
            dr[6] = chain_info.one_sky_fld;
            dr[7] = chain_info.one_sky_delay;
            dr[8] = chain_info.two_sky_delay;
            dr[9] = chain_info.two_sky_fld;
            //如果行数大于num序列,就让他更新存在的行序列。而不需要再插入了。 否则就插入新行   
            if (dt.Rows.Count >= num)
            {
                dt.Rows[num - 1].ItemArray = new object[] {
                    num,
                    chain_info.period + " " + chain_info.state,
                    chain_info.ecd,
                    chain_info.fld,
                    chain_info.transport_delay,
                    chain_info.base_delay,
                    chain_info.one_sky_fld,
                    chain_info.one_sky_delay,
                    chain_info.two_sky_delay,
                    chain_info.two_sky_fld };
                dt.AcceptChanges();//更新行
            }
            else  
            {
                dt.Rows.Add(dr);
            }
            //所有的行都加入datatable中后,进来一次
            if (isupdate)
            {
                if (isrecord)  //只会进来一次,记住当前最大的行数
                {
                    maxline_record = maxline;
                    isrecord = false;
                    //清除默认选中一行
                    uiDataGridView1.ClearSelection();//没起作用
                }
                //如果计算的最大行数,不等于上一次的最大的行数。就进去删除已经没有的行
                if (maxline != maxline_record)
                {
                    isrecord = true;

                    if (maxline < maxline_record)
                    {
                        int a = uiDataGridView1.Rows.Count;
                        //例如由10行减少到7行,则需要删除8、9、10行。不然还在datagridview中显示着。
                        for (int i = 1; i <= Math.Abs(maxline_record - maxline); i++)
                        {
                            dt.Rows.RemoveAt(a - i);
                        }
                    }
                }
                //所有行统计清零,重新计算
                maxline = 0;

            }
        }


        DataTable dt = new DataTable();

        private void Page_Channel_Load(object sender, EventArgs e)
        {
            dt.Columns.Add("序号", typeof(string));
            dt.Columns.Add("Station", typeof(string));
            dt.Columns.Add("ECD(us)", typeof(string));
            dt.Columns.Add("FLD(dBuV)", typeof(string));
            dt.Columns.Add("Tran(us)", typeof(string));
            dt.Columns.Add("Base(us)", typeof(string));
            dt.Columns.Add("1Delay(us)", typeof(string));
            dt.Columns.Add("1SkyFLD", typeof(string));
            dt.Columns.Add("2Delay(us)", typeof(string));
            dt.Columns.Add("2SkyFLD", typeof(string));

            uiDataGridView1.DataSource = dt;

            uiDataGridView1.Columns[0].FillWeight = 70;
            uiDataGridView1.Columns[1].FillWeight = 90;
            //清除默认选中一行
            uiDataGridView1.ClearSelection();//没起作用
        }
90e家 2021-04-20
  • 打赏
  • 举报
回复
BindingList<> 更具有优势,相比较list,另外无论是添加或者更新,先去用主键做查询不就知道了么?集合都支持lamda表达式的,直接list.firstordefault ,r默认如果没有就添加,如果有就是更新
wang_peng 2021-04-19
  • 打赏
  • 举报
回复
不建议操作,DataGridView1.Rows,挺麻烦的事。直接操作datatable, 你现在要学习的就是怎么操作datatable,给你一个思路 DataTable dt = new DataTable(); dt.Columns.Add("col", typeof(int)); //假如dt里有数据 this.dataGridView1.DataSource = dt; //添加数据 DataRow dataRow = dt.NewRow(); dataRow[0] = 1; dt.Rows.Add(dataRow); //修改数据 dt.Rows[0].ItemArray = new object[] { 2 }; //删除数据 dt.Rows.RemoveAt(0); //最后这句,即更新datatable及datagrid界面的内容 dt.AcceptChanges();
morliz子轩 2021-04-18
  • 打赏
  • 举报
回复
引用 3 楼 这也不能运行不是吧 的回复:
不好意思啊,可能我没表达好。你就当只有四行数据,我不需要再插入新行了,后面的数据只需要更新这四行数据就行了。感谢感谢
没事,其实思路很重要。 那还有最后一个东西,要搞清楚。 读数据源Row的行id,也就是RowIndex行索引值。用它去检查当前DataGridView表中是否有这个id行,有就Update,没有就Update。 是这么个思路吧? 如果是这么个思路,你只要判断数据源怎么传进来,是从哪个事件层面传进来实现。这个搞明白了就容易写了
morliz子轩 2021-04-18
  • 打赏
  • 举报
回复
当Update或Insert值之后,需要写入数据源。一般数据源是泛型,比如下面的demo是List<BranJob>,是往DB方向读写的。 你要做的事情,就是Update或Insert将值写入数据源之后,要进行Dgv重置,重载数据源。 而重载数据源,涉及到三个部分: 1、数据源表,可以为DataTable,也可以是泛型,当然也可以是象你这样,以DataRow或DataGridViewRow类型向dgv来插入。 2、Dgv表头,也就是表的列头可以重新装载,也可以不清空(这句:DgvJob.Columns.Clear();),一般来讲,重载表头一般是有对表样式重新配置的需求。(也就是Rows、Columns或Cells的DefaultCellStyle属性,当然也可以给全表配置一个默认样式,如:dgv.DefaultCellStyle) 3、事件的订阅和撤销。这部分的东西就非常多了。如果是后台逻辑来处理行、单元格值的更新或插入,那可以忽略。象你写的就是这种情况

         ///Dgv数据源重置
        /// <summary>
        /// 重置DgvJob对象
        /// </summary>
        private void ResetDgvJobSet()
        {
            //清空
            DgvJob.DataSource = null;
            DgvJob.Rows.Clear();
            DgvJob.Columns.Clear();

            //复位
            //DgvJob.SelectionMode = DataGridViewSelectionMode.CellSelect;
            //DgvJob.CellMouseClick -= new DataGridViewCellMouseEventHandler(DgvJob_CellMouseClick);

            //重载
            DgvJob.AllowUserToAddRows = false;
            DataGridViewHelper.InitDgvJobFace(ref DgvJob);
            InitDgvData(DgvJob);
        }

/// <summary>
/// DataGridView控件辅助类
/// </summary>
public class DataGridViewHelper
{
public static DataGridView InitDgvJobFace(ref DataGridView dgv)
        {
            //【BranJob】列初始化
            DataGridViewCheckBoxColumn multiselect = CreateCheckColumn("multiselect", "选择");

            DataGridViewTextBoxColumn id = CreateTextBoxColumn("id", "内码标识", "BranjobId", false);
            DataGridViewComboBoxColumn jobna = CreateComboBoxColumn("jobna", "职位名称", "Jobno");
            SetAlternateChoicesUsingItems(jobna);

            DataGridViewTextBoxColumn planqty = CreateTextBoxColumn("planqty", "定编人数", "Planqty");

            DataGridViewTextBoxColumn jobqty = CreateTextBoxColumn("jobqty", "实际人数", "Jobqty");
            DataGridViewTextBoxColumn lackqty = CreateTextBoxColumn("lackqty", "欠缺人数", "Lackqty");

            DataGridViewTextBoxColumn overtime = CreateTextBoxColumn("overtime", "固定加班小时", "Overtime");
            //overtime.DefaultCellStyle = CellStyle(CellStyleState.decimalCellStyle);

            //添加到DataGridView对象
            DgvJob.Columns.AddRange(new DataGridViewColumn[]
            {
                id,
                jobna,
                planqty,
                jobqty,
                lackqty,
                overtime
            });
            //插入多选[列]
            DgvJob.Columns.Insert(0, multiselect);
            InitDgv(DgvJob);

            return DgvJob;
        }

/// <summary>
        /// 初始化Dgv格式样式
        /// </summary>
        /// <param name="dgv"></param>
        private static void InitDgv(DataGridView dgv)
        {
            dgv.EnableHeadersVisualStyles = false;
            dgv.AutoGenerateColumns = false;
            //dgv.RowHeadersVisible = false;
            //默认单元格样式
            //dgv.DefaultCellStyle = CellStyle(CellStyleState.textCellStyle);
            //默认行标题样式
            //dgv.RowHeadersDefaultCellStyle = CellStyle(CellStyleState.rowHeaderCellStyle);

            dgv.RowTemplate.Height = 23;     //默认行高
            dgv.AllowUserToAddRows = false;     //禁止新增列
            dgv.EditMode = DataGridViewEditMode.EditOnEnter;
            dgv.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;    //列标题居中
            //dgv.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

            //列顺序调整
            dgv.AllowUserToOrderColumns = false;
        }

        /// <summary>
        /// 创建基于DataGridView文本控件
        /// </summary>
        /// <param name="TextName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldName">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewTextBoxColumn CreateTextBoxColumn(string TextName, string HeaderCaption, string DataFieldName, bool visible = true)
        {
            DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn()
            {
                Name = TextName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldName,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                ReadOnly = true,
                Visible = visible
            };
            return column;
        }

        /// <summary>
        /// 创建基于DataGridView下拉列表控件
        /// </summary>
        /// <param name="CmbBoxName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldName">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewComboBoxColumn CreateComboBoxColumn(string CmbBoxName, string HeaderCaption, string DataFieldName)
        {
            DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn()
            {
                Name = CmbBoxName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldName,
                FlatStyle = FlatStyle.Popup,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                ReadOnly = true
            };

            return column;
        }

        /// <summary>
        /// 创建基于DataGridView多选CheckBox控件
        /// </summary>
        /// <param name="ChkName">对象Name</param>
        /// <param name="HeaderCaption">对象HeaderText</param>
        /// <param name="DataFieldname">对象DataPropertyName</param>
        /// <returns></returns>
        private static DataGridViewCheckBoxColumn CreateCheckColumn(string ChkName, string HeaderCaption, string DataFieldname = null)
        {
            DataGridViewCheckBoxColumn column = new DataGridViewCheckBoxColumn()
            {
                Name = ChkName,
                HeaderText = HeaderCaption,
                DataPropertyName = DataFieldname,
                SortMode = DataGridViewColumnSortMode.NotSortable,
                TrueValue = false,
                ReadOnly = true,

                AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
                FlatStyle = FlatStyle.Standard,
                CellTemplate = new DataGridViewCheckBoxCell()
            };
            column.CellTemplate.Style.BackColor = Color.Beige;

            return column;
        }
}
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning的回复:
找到与 num 对应的 uiDataGridView1.Rows 的序号:index uiDataGridView1.Rows[index]= row; erbushijiandande uiDataGridView1.Rows.Add(row); 一加了之
好的,感谢提供思路,我去搜搜想想
xuzuning 2021-04-18
  • 打赏
  • 举报
回复
找到与 num 对应的 uiDataGridView1.Rows 的序号:index uiDataGridView1.Rows[index]= row; erbushijiandande uiDataGridView1.Rows.Add(row); 一加了之
  • 打赏
  • 举报
回复
引用 2 楼 wang_peng的回复:
datagrid.datasource 绑定 datatable , 然后直接更新datatable的行就可以了, 在datagrid上操作数据麻烦,而且容易出错,你现在不就出错了,这错莫名其妙的
数据是一秒四组,四组的来。感谢感谢,我搜搜去datatable
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩的回复:
我都没完全看明白,你的完整需求。 只说明了,表行的insert或update,是由行标识1、2、3、4来判断。 如果标识相同,即为update,如果标识不存在,即为insert。 那我想问一句,那第一个图是怎么理解,标识1234,出现3次相同的数据行?
不好意思啊,可能我没表达好。你就当只有四行数据,我不需要再插入新行了,后面的数据只需要更新这四行数据就行了。感谢感谢
wang_peng 2021-04-18
  • 打赏
  • 举报
回复
datagrid.datasource 绑定 datatable , 然后直接更新datatable的行就可以了, 在datagrid上操作数据麻烦,而且容易出错,你现在不就出错了,这错莫名其妙的
  • 打赏
  • 举报
回复
引用 7 楼 morliz子轩 的回复:
[quote=引用 3 楼 这也不能运行不是吧 的回复:] 不好意思啊,可能我没表达好。你就当只有四行数据,我不需要再插入新行了,后面的数据只需要更新这四行数据就行了。感谢感谢
没事,其实思路很重要。 那还有最后一个东西,要搞清楚。 读数据源Row的行id,也就是RowIndex行索引值。用它去检查当前DataGridView表中是否有这个id行,有就Update,没有就Update。 是这么个思路吧? 如果是这么个思路,你只要判断数据源怎么传进来,是从哪个事件层面传进来实现。这个搞明白了就容易写了[/quote]
Data data = new Data();

data.Column1 = num.ToString();
data.Column2 = chain_info.period + " " + chain_info.state;
data.Column3 = chain_info.ecd;
data.Column4 = chain_info.fld;
data.Column5 = chain_info.transport_delay;
data.Column6 = chain_info.base_delay;
data.Column7 = chain_info.one_sky_fld;
data.Column8 = chain_info.one_sky_delay;
data.Column9 = chain_info.two_sky_delay;
data.Column10 = chain_info.two_sky_fld;

if (datas.Exist(num-1))
{
	datas.Update(num - 1, data);
}
else
{
	datas.Add(data);
}

if (isupdate)
{
	uiDataGridView1.DataSource = datas;
	uiDataGridView1.Refresh();
}
根据你说的,更新问题解决了。感谢感谢。又有新问题了,数据从4组变成了3组,datagridview还显示4组,不知道怎么实时变化
morliz子轩 2021-04-17
  • 打赏
  • 举报
回复
我都没完全看明白,你的完整需求。 只说明了,表行的insert或update,是由行标识1、2、3、4来判断。 如果标识相同,即为update,如果标识不存在,即为insert。 那我想问一句,那第一个图是怎么理解,标识1234,出现3次相同的数据行?

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧