WinForm中DataGridView添加,删除,修改操作具体方法

1.添加操作,代码如下:


代码如下:

IList<SelfRun> selfRunConfigs = new List<SelfRun>();
private void btnNewConfig_Click(object sender, EventArgs e)
{
try
{
string _lampNo = UpDownSelfLampNo.Value.ToString();
int _ctrlGpNo = Convert.ToInt16(UpDownCtrlGpCnt.Value);
string _opWay = string.Format("{0}", rbConfig.Checked == true ? 1 : 0);
string _opCtuch = GetSelectedCtuCh();
if (CheckNewConfigIsLega(_ctrlGpNo, _opCtuch))
{
string _opType = rbCgOpen.Checked == true ? "01" : rbCgClose.Checked == true ? "00" : "02";
selfRunConfigs.Add(new SelfRun(_opCtuch, _opType, Convert.ToInt32(UpDownTime.Value)));
}
BindGridViewForIList<SelfRun>(gcConfigShow, selfRunConfigs);
}
catch (Exception ex)
{
MessageBox.Show(string.Format("新增配置失败,原因:{0}", ex.Message.Trim()));
}
}
private void BindGridViewForIList<T>(DataGridView gv, IList<T> datasource)
{
BindingList<T> _bindinglist = new BindingList<T>(datasource);
BindingSource _source = new BindingSource(_bindinglist, null);
gv.DataSource = _source;
}

SelfRun实体类代码如下:

代码如下:

public struct SelfRun
{
public SelfRun(string _opCtuCh, string _opWay, int _opTime)
: this()
{
OpCtuCh = _opCtuCh;
OpWay = _opWay;
OpTime = _opTime;
}
public string OpCtuCh
{
get;
set;
}
public string OpWay { get; set; }
public int OpTime { get; set; }
}

界面绑定,如图:

效果如图:

2.修改操作,代码如下:
其实思路很简单,就是点击行的时候,获取行内数据信息,然后填充到控件内,修改后,点击‘修改配置'后即可保存修改。

所以首先设置点击控件的时候,是选择一行,如图:

在CellClick事件中完成,当点击行的时候,将行数据填充到控件内,代码如下:

代码如下:

private void gcConfigShow_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex < 0) return;
DataGridView _dgv = (DataGridView)sender;
string _opWay = _dgv.Rows[e.RowIndex].Cells["OpWay"].Value.ToString();
switch (_opWay)
{
case "00":
ThreadSafeOpRadioButton(rbCgClose, true);
break;
case "01":
ThreadSafeOpRadioButton(rbCgOpen, true);
break;
case "02":
ThreadSafeOpRadioButton(rbSaveOne, true);
break;
}
string _opCtuch = _dgv.Rows[e.RowIndex].Cells["OpCtuCh"].Value.ToString();
for (int i = 0; i < _opCtuch.Length; i++)
{
if (i == 0)
ThreadSafeCheckBox(ckch1, _opCtuch[i].Equals('1'));
if (i == 1)
ThreadSafeCheckBox(ckch2, _opCtuch[i].Equals('1'));
if (i == 2)
ThreadSafeCheckBox(ckch3, _opCtuch[i].Equals('1'));
if (i == 3)
ThreadSafeCheckBox(ckch4, _opCtuch[i].Equals('1'));
if (i == 4)
ThreadSafeCheckBox(ckch5, _opCtuch[i].Equals('1'));
if (i == 5)
ThreadSafeCheckBox(ckch6, _opCtuch[i].Equals('1'));
if (i == 6)
ThreadSafeCheckBox(ckch7, _opCtuch[i].Equals('1'));
if (i == 7)
ThreadSafeCheckBox(ckch8, _opCtuch[i].Equals('1'));
}
string _opTime = _dgv.Rows[e.RowIndex].Cells["OpTime"].Value.ToString();
decimal _time;
if (decimal.TryParse(_opTime, out _time))
ThreadSfeOpUpDown(UpDownTime, _time);
}

点击修改按钮内代码如下:

代码如下:

private void btnUpdateConfig_Click(object sender, EventArgs e)
{
try
{
if (CheckSelectedRow())
{
int _rowIndex = gcConfigShow.CurrentCell.RowIndex;
int _ctrlGpNo = Convert.ToInt16(UpDownCtrlGpCnt.Value);
string _opWay = string.Format("{0}", rbConfig.Checked == true ? 1 : 0);
string _opCtuch = GetSelectedCtuCh();
string _opType = rbCgOpen.Checked == true ? "01" : rbCgClose.Checked == true ? "00" : "02";
SelfRun _selfRunByRowIndex = selfRunConfigs[_rowIndex];
_selfRunByRowIndex.OpCtuCh = GetSelectedCtuCh();
_selfRunByRowIndex.OpTime = Convert.ToInt32(UpDownTime.Value);
_selfRunByRowIndex.OpWay = _opType;
selfRunConfigs.RemoveAt(_rowIndex);
selfRunConfigs.Add(_selfRunByRowIndex);
BindGridViewForIList<SelfRun>(gcConfigShow, selfRunConfigs);
}
}
catch (Exception ex)
{
MessageBox.Show(string.Format("修改配置失败,原因:{0}", ex.Message.Trim()));
}
}

3.删除操作,代码如下:


代码如下:

private void btnDeleteConfig_Click(object sender, EventArgs e)
{
if (CheckSelectedRow())
{
if (MessageBox.Show("是否删除该行数据?", "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
selfRunConfigs.RemoveAt(gcConfigShow.CurrentCell.RowIndex);
BindGridViewForIList<SelfRun>(gcConfigShow, selfRunConfigs);
}
}
}

(0)

相关推荐

  • c#中Winform实现多线程异步更新UI(进度及状态信息)

    引言 在进行Winform程序开发需要进行大量的数据的读写操作的时候,往往会需要一定的时间,然在这个时间段里面,界面ui得不到更新,导致在用户看来界面处于假死的状态,造成了不好的用户体验.所以在大量数据操作的应用上,需要使用多线程来处理这种情况.在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单.本文实现了用子线程去处理数据,并实时更新主线程的ui状态了.下面就开始一步步的去实现异步线程更新

  • WinForm中快捷键与组合按键的设置方法

    第一种方法..代码复杂,操作简单的快捷键 新建一个空白窗体 每个窗体都有这样3个事件:KeyDown.KeyPress.KeyUp,KeyDown和KeyPress都是按键按下事件,但KeyDown用的是KeyCode跟键盘各个按键相对应,它对应Keys枚举,用起来比较方便:而KeyPress用的是KeyChar,这个就要找ASC II编码了,不方便.KeyUp是按键弹起事件,不常用,因此我们使用KeyDown事件来设置窗体的快捷键,双击该事件后的空白生成代码,首先我们设置单个按键,让它按下F1

  • c# winform多线程的小例子

    在文本框中输入一个数字,点击开始累加按钮,程序计算从1开始累计到该数字的结果.因为该累加过程比较耗时,如果直接在UI线程中进行,那么当前窗口将出现假死.为了有更好的用户体验,程序启动一个新的线程来单独执行该计算,然后每隔200毫秒读取一次累加结果,并把结果显示到文本框下方的label控件中.同时,程序支持取消操作,点击取消累计按钮,程序将取消累加操作,并把当前累加值显示到label中.为了方便后面的描述,我把UI线程称作主线程,把执行累加计算的线程称作工作者线程.该过程有两个关键点: 1:如何在

  • WinForm中的登录实现

    在一般的C/S系统中,登录功能基本上是必备功能, 总结了三种C# Winform登录功能的实现方法. 第一种:在应用程序设置代码里(Program.cs)将应用程序入口改成系统主窗口 听起来有点绕,就是说,在应用程序初始化时,第一个加载的页面是我们登录后的主页面. 1.在Program.cs文件中设置Application.Run: 复制代码 代码如下: Application.Run(new FormMain());//设置应用程序运行时加载的窗口 2.添加登录按钮事件private void

  • C#中WinForm程序退出方法技巧总结

    本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下. 1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退

  • C# WinForm中禁止改变窗口大小的方法

    本文介绍在使用C#开发WinForm窗体程序时,如何设置窗体的大小不能被改变. 我们在开发一个窗体(WinForm)程序时,所有的控件都部署在程序界面上了,如果这时来把窗体的大小调整一下,那界面就难看了.怎么设置窗体大小不能被修改呢? 在Form类下面有一个FormBorderStyle的字段,我们可以通过设置它的值来让窗体不能被拉大拉小.FormBorderStyle的值设置为FormBorderStyle.FixedSingle或Fixed3D时,窗体大小是不能被改变的. 当然,还有一种情况

  • C# Winform下载文件并显示进度条的实现代码

    方法一: 效果如下图所示: 代码如下: 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; namespace WinShowDown { public partial class F

  • C# Winform 禁止用户调整ListView的列宽

    复制代码 代码如下: // 事件: 改变列宽的时候 private void ColumnWidthChange(object sender, ColumnWidthChangingEventArgs e) { // 如果调整的不是第一列,就不管了 if (e.ColumnIndex > 0) return; // 取消掉正在调整的事件 e.Cancel = true; // 把新宽度恢复到之前的宽度 e.NewWidth = this.lvStudents.Columns[e.ColumnIn

  • WinForm窗体间传值的方法

    本文实例讲述了WinForm窗体间传值的方法.分享给大家供大家参考.具体实现方法如下: 窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式:   1.公共静态变量: 2.使用共有属性: 3.使用委托与事件: 4.通过构造函数把主窗体传递到从窗体中: 一.通过静态变量 特点:传值是双向的,实现简单   实现代码如下: 在一个app类中定义一个静态成员value 复制代码 代码如下: public class app { public static string value

  • C#,winform,ShowDialog,子窗体向父窗体传值

    调用showdialog方法后,调用代码被暂停执行,等到调用showdialog方法的窗体关系后再继续执行.而且窗体可以返回一个dialogresult值,他描述了窗体关闭的原因,例如OK,Cancel,yes,no等.为了让窗体返回一个dialogresult,必须设置窗体的dialogresult值,或者在窗体的一个按钮上设置dialogresult属性. 例子: 下面是子窗体代码,要求输入phone,然后会返回给父窗体. using System; using System.Collect

  • .NET WinForm实现在listview中添加progressbar的方法

    本文实例讲述了.NET WinForm实现在listview中添加progressbar的方法.分享给大家供大家参考,具体如下: 找了好长时间没找到,后来索性自己写了一个: 首先,在往listview加载数据的事件里添加progressbar: foreach (string d in arr) { int index = lv.Items.Count + 1; item = new ListViewItem(new string[] { index.ToString(), d, ""

随机推荐