我有一个使用下面给出的代码填充datagridview的函数。它基本上显示了在给定的时间段和日期(Sun-Sat)内安排的患者列表。
在我的机器上,datagridview在发布和调试版本上都显示得很好。我还尝试发布应用程序并将其安装在同一台机器上,没有任何问题。
不幸的是,当相同的应用程序发布并安装在不同的机器上时,datagridview不会显示任何数据。同样的应用程序还显示了患者列表和其他详细信息的其他数据网格视图,它们都显示得很好。
我在这里读了很多帖子,也一直在摆弄代码,但到目前为止,我还没有找到任何解决方案。是代码有问题,还是有一些我不知道的设置有问题?
任何帮助或意见都将深表感谢。
编辑:我已经更新了代码以提供更多细节(以防万一)
SqlConnection c = new SqlConnection(connectionString);
//weeArray simply contains 7 dates, (Sun-Sat)
for (int ctr = 0; ctr < weekArray.Length; ctr++)
{
c.Open();
SqlCommand command = new SqlCommand(null, c);
command.CommandText = @"Reealy long sql that I'm sure isn't causing the issue";
command.Parameters.Add("@scheduleDate", SqlDbType.Date).Value = weekArray[ctr];
command.Parameters.Add("@scheduleStaff_ID", SqlDbType.Int).Value = comboBox2.SelectedValue;
command.Prepare();
command.ExecuteReader();
SqlDataAdapter a = new SqlDataAdapter(command);
c.Close();
DataTable dt = new DataTable();
a.Fill(dt);
if (ctr == 0)
{
dataGridView2.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView2.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView2.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(230, 255, 255);
}
else if (ctr == 1)
{
dataGridView3.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView3.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView3.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
else if (ctr == 2)
{
dataGridView4.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView4.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView4.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
else if (ctr == 3)
{
dataGridView5.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView5.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView5.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
else if (ctr == 4)
{
dataGridView6.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView6.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView6.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
else if (ctr == 5)
{
dataGridView7.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView7.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView7.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
else if (ctr == 6)
{
dataGridView8.DataSource = dt;
if (weekArray[ctr].Equals(DateTime.Now.ToString("MM-dd-yyyy")))
dataGridView8.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 192);
else
dataGridView8.Columns["patient"].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 255);
}
}发布于 2016-10-14 21:19:50
显然,空白的datagridview是由于我使用了一个准备好的语句造成的。语句本身没有问题,只是碰巧这段代码不能很好地与预准备语句一起工作。
根据我到目前为止所读到的内容,它通常是由不同/旧版本的SQL express和/或.NET框架(有时两者都有)引起的。
由于该部分代码实际上并不需要使用预准备语句,因此我将其修改为一个简单的sqlcommand,因为除了按钮单击之外,将不会有任何用户输入,并且问题已得到解决。
该解决方案仅适用于这种情况,因为不涉及用户文本输入,并且安装/升级SQL/.NET framework不是一个可行的选择,因为目标计算机相当旧并且缺少磁盘空间(除了其他原因,包括但不限于过时的硬件和软件)。
(感谢您的所有投入,它们对更快地跟踪问题起到了巨大的帮助。)
https://stackoverflow.com/questions/40034900
复制相似问题