【发布时间】:2016-10-24 00:29:15
【问题描述】:
工作简介:
我在button_click 事件上填充了DataGridView。 (根据在文本框中输入的 SQL 查询,DataGridView 将被填充)
private void button1_Click(object sender, EventArgs e)
{
string strSQLQuery = textBox1.Text.Trim();
SqlDataAdapter dataAdapter = new SqlDataAdapter(strSQLQuery, strCon);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable dt = new DataTable();
dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(dt);
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
dataGridView1.ReadOnly = true;
dataGridView1.DataSource = dt;
bool flag = false;
if (!dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].IsNewRow)
{
foreach (DataGridViewCell cell in dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells)
{
if (cell.Value == System.DBNull.Value)
flag = true;
}
}
if(flag)
MessageBox.Show("Many cells are empty");
}
问题:
如果行中的所有列都不包含NULL 值,则此方法非常有效。
但是,如果在行的任何单元格中找到一个或多个 NULL 值,我会得到消息框 "Many cells are empty",就像我的代码中一样。当我尝试移动水平滚动条(我用来显示更多列)时,我得到以下DataGridView 默认错误对话框。
尝试过的解决方案:
我尝试了以下解决方案。但没有人能解决这个问题。请考虑帮助解决此问题。
LINK 1 - MSDN - DataGridViewDataErrorEventArgs 类
LINK 2 - 社交 MSDN 网站
LINK 3 - StackOverflow 中的已验证答案
LINK 4 - Experts-Exchange 中的所有建议和验证答案
我也尝试通过以下方法避免弹出此错误。但这似乎并不能解决问题。
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
e.Cancel = true;
}
初步信息
IDE:Visual Studio 2010 专业版
.Net: 4.0 版
使用的语言: C#
数据库:SQL Server 2008
【问题讨论】:
-
该消息表明查询没有问题,但绘制了一些图像。发布更多代码。你对返回的结果做了什么?某些字段中有图片吗?
-
没有图像存储在数据库中。不涉及其他基本代码。在windows窗体中,使用了一个文本字段(textBox1)、一个按钮(button1)和一个数据网格(dataGridView1)。当应用程序运行时,我在 textbox1 中手动输入查询(比如 select * from table1)并点击 button1,这个 button1_click() 方法会触发并填充 datagridview 。 table1 中的一些单元格包含 NULL 并显示错误(如图所示)。我尝试了所有提到的“TRIED SOLUTIONS”,但没有任何帮助克服/抛出这个错误。你可以在你的 IDE 中尝试这些并面临同样的问题。
-
您的问题无法重现,也许您应该发布其他内容,以便我们重现您遇到的错误,例如
table1架构和一些虚构数据。目前这段代码对我来说很好用! -
@S.Akbari - 我尝试使用不同版本的家庭系统。它工作正常。谢谢。在我第一次在办公室试用 VS2010 时,当我查询一个包含多列 (15+) 的表时,我不得不在 datagridview 中移动水平滚动条,当时我遇到了这个错误。
标签: c# winforms datagridview dbnull