【问题标题】:Blank Datagridview空白数据网格视图
【发布时间】:2017-02-23 09:33:18
【问题描述】:

我有一个使用下面给出的代码填充数据网格视图的函数。它基本上显示了在给定时间段和日期最多 7 天(周日至周六)安排的患者列表。

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);
    }
}

【问题讨论】:

  • 你试过调试代码吗? dt 是否填充?
  • 数据表已填满,在我的机器上一切正常。唯一的问题是当我尝试在另一台机器上运行它时。我也很确定问题不在于数据库位置,因为它填充了所有其他数据网格视图并加载了所有需要的组合框而没有问题
  • 那么,在什么情况下有问题呢?如果其他人在工作
  • @Squishablez,您输入的代码不足以确定问题所在。即使这样,我也怀疑您的机器和另一台机器上的区域设置可能不同,这会导致日期比较失败,从而导致意外的应用程序流,最后 datagridview 什么也没有显示。
  • 您需要在另一台机器上调试或写出显示状态的日志,例如DataTable 行数等。我们也无能为力。

标签: c# winforms visual-studio datagridview


【解决方案1】:

显然,空白的 datagridview 是由于我使用的是准备好的语句而引起的。语句本身没有问题,只是碰巧那段代码不能很好地与准备好的语句一起工作。

根据我目前阅读的内容,这通常是由不同/旧版本的 SQL express 和/或 .NET 框架(有时两者兼有)引起的。

由于该部分代码实际上并不需要使用准备好的语句,因此我将其修改为一个简单的 sqlcommand,因为除了单击按钮之外没有用户输入并且问题已解决。

该解决方案仅适用于这种情况,因为不涉及用户文本输入,并且 SQL/.NET 框架的安装/升级不是一个可行的选择,因为目标机器相当旧并且缺少磁盘空间(除了其他原因,包括但不限于过时的硬件和软件。)

(感谢您的所有意见,他们对更快地跟踪问题提供了巨大帮助。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多