首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

阻止DataGridView BindingSource更新特定列的单元格值

可以通过处理DataGridView的CellValueChanged事件来实现。以下是一个完善且全面的答案:

在DataGridView的CellValueChanged事件中,可以通过检查特定列的索引或名称来判断是否允许更新单元格的值。如果不允许更新,则可以将单元格的值重新设置为先前的值,从而实现阻止更新特定列的效果。

以下是一个示例代码,演示了如何阻止DataGridView BindingSource更新名为"特定列"的单元格值:

代码语言:txt
复制
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // 获取特定列的索引或名称
    int columnIndex = dataGridView1.Columns["特定列"].Index;

    // 判断是否为特定列的值发生了变化
    if (e.ColumnIndex == columnIndex)
    {
        // 获取当前单元格的值
        object newValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

        // 获取先前的值
        object previousValue = GetPreviousValue(e.RowIndex, e.ColumnIndex);

        // 比较当前值与先前值
        if (!IsAllowedUpdate(previousValue, newValue))
        {
            // 阻止更新,重新设置为先前的值
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = previousValue;
        }
    }
}

private object GetPreviousValue(int rowIndex, int columnIndex)
{
    // 通过BindingSource获取先前的值
    DataRowView rowView = (DataRowView)dataGridView1.Rows[rowIndex].DataBoundItem;
    DataRow row = rowView.Row;
    object previousValue = row[columnIndex, DataRowVersion.Original];

    return previousValue;
}

private bool IsAllowedUpdate(object previousValue, object newValue)
{
    // 自定义逻辑判断是否允许更新
    // 这里可以根据业务需求进行判断,比如根据用户权限、特定条件等
    // 返回true表示允许更新,返回false表示不允许更新
    // 示例中使用了简单的比较操作,实际情况中可以根据实际需求进行自定义
    return !newValue.Equals("不允许更新");
}

在上述示例代码中,我们首先获取特定列的索引或名称,然后在CellValueChanged事件中判断当前的CellValue是否是特定列,并获取先前的值。接着,我们使用自定义的IsAllowedUpdate方法来判断是否允许更新特定列的值。如果不允许更新,则将单元格的值重新设置为先前的值。

需要注意的是,示例中使用了一个简单的比较操作来判断是否允许更新,实际情况中可以根据实际需求进行自定义。例如,可以根据用户权限、特定条件等来确定是否允许更新特定列的值。

对于DataGridView的BindingSource更新特定列的单元格值,以上的答案应该可以满足要求。如果有其他问题,欢迎继续提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

可视化数据库设计软件有哪些_数据库可视化编程

格式: .Rows[i].Cells[j].Value 表示数据表中第i条记录(行)第j个字段(。...5.DataGridView编辑 单击DataGridView控件设计器中“编辑”选项,或者在DataGridView控件“属性”面板中单击Columns属性右侧省略按钮,即可进入“编辑...///单元格单击事件,获取当前选择单元格--以下有3种方法 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs...textBox5.Text = dataGridView1.SelectedCells[0].Value.ToString();//被选择单元格数组第一个 textBox5...= dataGridView1.SelectedCells[0].Value.ToString();//被选择单元格数组第一个 textBox5.Text = dataGridView1

6.7K40
  • 通过 INotifyPropertyChanged 实现观察者模式

    INotifyPropertyChanged 它作用:向客户端发出某一属性已更改通知。...当属性改变时,它可以通知客户端,并进行界面数据更新.而我们不用写很多复杂代码来更新界面数据,这样可以做到方法简洁而清晰,松耦合和让方法变得更通用.可用地方太多了:例如上传进度,实时后台数据变更等地方...它作用:向客户端发出某一属性已更改通知。...当属性改变时,它可以通知客户端,并进行界面数据更新.而我们不用写很多复杂代码来更新界面数据,这样可以做到方法简洁而清晰,松耦合和让方法变得更通用.可用地方太多了:例如上传进度,实时后台数据变更等地方...必需调用DataGridView.Refresh();界面数据才会即使更新

    2.8K10

    【C#】让DataGridView输入中实时更新数据源中计算

    本文适用Winform开发,且DataGridView数据源为DataTable/DataView情况。...DataGridView(下称dgv),A、B两都要在dgv中显示,其中A可编辑(ReadOnly=false)。...),但dt和dv没有,后者只到行这一级,虽然可以通过DataRow[x]或DataRowView[x]访问单元格,但在类层级上并不存在DataCell这样表示单元格实体类,也就是dt和dv编辑.../提交等操作是以【行】为单元 下面是dgv常规提交流程: ①编辑dgv单元格→②完成编辑(离开焦点)→③提交数据源(源行仍处于编辑状态)→④焦点离开dgv行→⑤源行结束编辑状态→⑥源行更新计算(其实完整流程还包括别的环节...可以看到,计算得到更新关键有两处: dgv单元格数据要提交到数据源相应单元格 源行结束编辑状态 按常规提交流程,必须使焦点离开单元格所在行(只离开单元格都不行哦)才能达到目的,而我们需求是,编辑过程中就要实时更新

    5.2K20

    【愚公系列】2023年11月 Winform控件专题 DataGridView控件详解

    例如,可以使用以下代码在单元格编辑后更新数据:private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs...]; // 更新数据库中数据}排序数据:使用DataGridViewSort方法来对数据进行排序。...:根据显示单元格内容自适应单元格宽度,除了标题。...可以通过设置属性来控制哪些可以排序,以及排序方式等。数据过滤:DataGridView控件可以允许用户对数据进行过滤,只显示符合特定条件数据。...数据统计:DataGridView控件可以允许用户对数据进行统计,如求和、平均值、最大、最小等。可以通过编写代码来实现统计功能。

    1.8K11

    合并excel,为空单元格被另一替换?

    一、前言 前几天在Python铂金交流群【逆光】问了一个Pandas数据处理问题,问题如下:请问 合并excel,为空单元格被另一替换。...【逆光】:好,我去看看这个函数谢谢 【逆光】:我列表不挨着, a b互补,我需要变成c (c 包含 a 和 b) 【Siris】:最笨方法遍历判断呗 【逆光】:太慢了,我数据有点多。...【Siris】:你是说c是a和b内容拼接起来是么 【逆光】:是 【Siris】:那你其实可以直接在excel里用CONCAT函数。 【不上班能干啥!】:只在excel里操作,速度基本没啥改变。...我不写,就报这个错 【瑜亮老师】:有很多种写法,最简单思路是分成3行代码。就是你要给哪一全部赋值为相同,就写df['列名'] = ''。不要加方括号,如果是数字,就不要加引号。...【瑜亮老师】:3一起就是df.loc[:, ['1', '', '3'']] = ["", 0, 0] 【不上班能干啥!】:起始这行没有报错,只是警告,因为你这样操作会影响赋值前变量。

    10710
    领券