c#winform中datagridview中某单元格,开始输入内容,然后把输入清空再保存,提示错误。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform中datagridview中某单元格,开始输入内容,然后把输入清空再保存,提示错误。相关的知识,希望对你有一定的参考价值。

错误提示:“未将对象引用设置到对象实例”,我们通过对该单元格内容进行判断,如果是null,就给它赋值成"",但是觉得很麻烦,有没有好的解决办法?请高手帮忙吧
我的问题是,我说这种情况是不是必须用代码处理?可不可以通过设置datagridview的属性等方法解决。

可以使用Convert.ToString()方法。正常值转换结果和ToString一样,null的话就会变成“”追问

我想问的是,这种情况是不是必须处理?可不可以通过设置datagridview的属性等方法解决。

追答

似乎还没有这样的属性可以解决你的问题,你是要保存到哪里?会出现问题一定是你显式的调用了Value.ToString()方法,否则不会有这个问题。

参考技术A private void dgvAssistUnitList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

if (dgvAssistUnitList.CurrentCell.ColumnIndex == clUnit.Index)

TextBox txt = (TextBox)e.Control;
// 失去焦点是发生
txt .LostFocus += new EventHandler(txt _LostFocus);



/// <summary>
/// 失去焦点时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void txt _LostFocus(object sender, EventArgs e)

1:获得当前单元格的值、
2:判断值是否为null ,如果为null,重新复制为空字符串


设置属性?? 没有遇到过、、
参考技术B 你是要吧数据保存到数据库里面吗?可以设置默认值或者设置成可以为null

C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改

如何实现?

我写好了,以下是截图,完整源码在附件中,有问题欢迎追问。

1.单击任意单元格


2.弹出修改对话框,输入新值,单击修改按钮,对话框自动关闭


3.修改成功了


参考技术A 通过datagridview双击事件实现获取datagridview数据,代码如下:
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)


// 取得当前单元格内容
Console.WriteLine(DataGridView1.CurrentCell.Value);
// 取得当前单元格的列 Index
Console.WriteLine(DataGridView1.CurrentCell.ColumnIndex);
// 取得当前单元格的行 Index
Console.WriteLine(DataGridView1.CurrentCell.RowIndex);

参考技术B 这个很简单!
我只讲思路!
1:通过鼠标单击选中某行数据触发datagridview的行选中事件,得到选中的这行数据!
2:在B窗体里面你可以通过构造方法在实例化B窗体对象的时候将选中的行数据传递到B窗体。
3:接下来就是给B窗体里面的控件赋值!至于怎么修改这条数据我想这个你应该会了吧!
4:再不明白就加我QQ657236296我给你代码吧追问

能不能给我个代码看看,我想学习一下

追答

string sID = dgvDsp.SelectedRows[0].Cells[0].Value.ToString();
这个是选中datagridview行获取它的ID的代码,只要怎么获取其它的数据我想就很简单了吧
接下来是传值
frmB b=new frmB(sID,...)你可以在B窗体里面定义一个构造函数在你传值到B窗体的时候通过new这个对象调用这个构造函数将值传递到B窗体(其实窗体传值方式很多可以通过属性、结构等方式)
接下来就是对这条数据进行你想要的操作了!代码我不会给你全部的,做程序开发最忌讳就是照抄别人的,你得有自己的思路只要思路清晰了代码自然就好写了,不然给了你代码问题是解决了但是对你的技术提高是没有任何好处的!

追问

在不会的时候就只能照葫芦画瓢啊,然后自己才能从中总结和提升!麻烦请教一下窗体间通过属性的传值、结构的传值的实现方式!

参考技术C 这b框体中 创建一个属性。A窗体中直接 传个对象过去 参考技术D 你百度一下,子窗体传值给父窗体、父窗体传值给子窗体,就可以解决你的问题了。追问

能不能给我个代码看看?学习一下

以上是关于c#winform中datagridview中某单元格,开始输入内容,然后把输入清空再保存,提示错误。的主要内容,如果未能解决你的问题,请参考以下文章

winform中怎么读取DataGridview中特定的某一列并赋值给一个数组?

C# Winform中 选中DatagridView控件中某行如何将该行某个字段(1,2,3,4,)的值绑定CheckedListBox控件的数

C#winform程序中,将A窗体datagridview中选中的数据传到B窗体里面的各个文本框中进行修改

用c#winform拖的datagridview控件,当选中一行数据以后鼠标离开之后,就选不中了

C#winform中datagridview导出Excel

C#winform的DataGridView问题