C#DataGridView删改

温馨提示:
以下代码无法直接复制粘贴使用,主要是其中用到的思路================
1.删除

/// <summary>
/// 删除列表中指定行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton7_Click(object sender, EventArgs e)
{
    if (skinDataGridView1.CurrentRow != null)
    {
        // 获取当前选中行索引
        int currentIndex = skinDataGridView1.CurrentRow.Index;
        // 获取当前选中行银行编码
        string fNumber = skinDataGridView1.Rows[currentIndex].Cells[0].Value.ToString();
        // 询问是否需要保存修改的内容
        DialogResult TS = MessageBox.Show("是否删除[" + fNumber + "]数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (TS == DialogResult.Yes)
        {
            int count = deleteData(fNumber);
            if (count > 0)
            {
                MessageBox.Show("删除成功");
            }
            else
            {
                MessageBox.Show("删除失败");
            }
            // 异步刷新数据列表
            refrenceData();
        }
    }
}
/// <summary>
/// 列表刷新委托
/// </summary>
public delegate void DataGridViewDelegateRefresh();
/// <summary>
/// 异步刷新数据列表
/// </summary>
public void refrenceData()
{
    // 异步刷新数据列表
    BeginInvoke(new DataGridViewDelegateRefresh(setDataGridViewData));
}
/// <summary>
/// 收款银行列表赋值
/// </summary>
private void setDataGridViewData()
{
    // 查询所有收款银行数据信息
    List<TBankInfo> bankInfoList = selectData("");
    if (bankInfoList == null || bankInfoList.Count <= 0)
    {
        return;
    }
    skinDataGridView1.Rows.Clear();
    this.Column4.Items.Clear();
    this.Column4.Items.Add("是");
    this.Column4.Items.Add("否");
    foreach (var item in bankInfoList)
    {
        // 获取最新行的索引
        int index = skinDataGridView1.Rows.Add();
        skinDataGridView1.Rows[index].Cells[0].Value = item.fNumber + "";
        skinDataGridView1.Rows[index].Cells[1].Value = item.fName + "";
        skinDataGridView1.Rows[index].Cells[2].Value = item.fBankNumber + "";
        //skinDataGridView1.Rows[index].Cells[3].Value = item.fDefault + "";
        /*DataGridViewCell acell = skinDataGridView1.Rows[index].Cells[3];
        DataGridViewComboBoxCell acombbox = acell as DataGridViewComboBoxCell;
        acombbox.Items.Add("是");
        acombbox.Items.Add("否");*/
        ((DataGridViewComboBoxCell)skinDataGridView1.Rows[index].Cells[3]).Style.NullValue = (item.fDefault == 1)?"是":"否";
        skinDataGridView1.Rows[index].Cells[4].Value = item.fNote + "";
    }
    // 设置第4列禁止编辑
    //skinDataGridView1.Columns[3].ReadOnly = true;
}

2.修改
使用CellParsing(退出单元格编辑后发生)方法

/// <summary>
/// 退出单元格编辑后发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinDataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
{
    // 获取编辑之前得银行编码
    string oldFNumberText = skinDataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
    // 根据银行编码查询当前银行数据信息
    List<TBankInfo> list = selectData(oldFNumberText);
    TBankInfo bankInfo = list[0];

    // 获取编辑之前的单元格内容
    string oldCellText = bankInfo.fDefault + "";
    // 如果不是下拉框
    if (e.ColumnIndex != 3)
    {
        oldCellText = skinDataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
    }

    // 获取编辑之后的单元格内容
    string newCellText = e.Value.ToString();
    // 如果为true,表示内容未改变
    if (!string.Equals(oldCellText, newCellText))
    {
        // 询问是否需要保存修改的内容
        DialogResult TS = MessageBox.Show("是否保存[" + newCellText + "]?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (TS == DialogResult.Yes)
        {
            // 保存新内容
            switch (e.ColumnIndex)
            {
                // 银行编码
                case 0:
                    List<TBankInfo> list1 = selectData(newCellText);
                    if (list1.Count > 0)
                    {
                        MessageBox.Show("[" + newCellText + "]已经存在!");
                        // 异步刷新数据列表
                        refrenceData();
                        return;
                    }
                    bankInfo.fNumber = newCellText;
                    break;
                // 银行名称
                case 1:
                    bankInfo.fName = newCellText;
                    break;
                // 银行账号
                case 2:
                    bankInfo.fBankNumber = newCellText;
                    break;
                // 默认
                case 3:
                    bankInfo.fDefault = int.Parse(string.Equals("是", newCellText) ? "1" : "0");
                    if (string.Equals("是", newCellText))
                    {
                        updateDataFDefault(bankInfo.fNumber, 0);
                    }
                    break;
                // 备注
                case 4:
                    bankInfo.fNote = newCellText;
                    break;
            }
            int index = updateData(bankInfo, oldFNumberText);
            if (index < 1)
            {
                MessageBox.Show("修改失败");
            }
            else
            {
                MessageBox.Show("修改成功");
            }
        }
        // 异步刷新数据列表
        refrenceData();
    }
}

3.新增
新增的话,本人是选择使用调用窗口的方式处理的。
中间最关键的问题在于内容填写之后,怎么将值传递给调用的窗口。

A.如果新增窗口时调用者的子窗口,那就好办了,可以直接在新增窗口保存数据按钮触发事件的时候调用到主窗口:this.parent.....
B.如果该新增窗口是一个独立的窗口,有两种方法:
	a.在调用窗口添加一个定时器,并且在公共类里面添加一个bool类型的锁。当调用窗口点击新增的时候,开启定时器(定时器每200毫秒查询一次锁是否被关闭),并开启保护锁(锁的作用是为了告诉定时器,数据是否新增完毕,如果新增完毕就关闭锁),当锁被关闭后,并且被定时器扫描到,就直接刷新列表,这样就有了数据传递的效果,当然刷新列表之后一定要关闭定时器哦,不然后果很严重的。
	b.使用公共静态类,把调用窗口对象放在静态类里面。之后就可以直接在新增窗口的各个事件中,直接调用该对象,从而实现数据传递。注意一定要是静态的。

4.DataGridView简单的操作可以看这里

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哎呦喂O_o嗨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值