Пустой Datagridview

#c# #winforms #visual-studio #datagridview

#c# #winforms #visual-studio #datagridview

Вопрос:

У меня есть функция, которая заполняет datagridview, используя приведенный ниже код. В основном он отображает список пациентов, запланированных на данный временной интервал и дату на срок до 7 дней (вс-Сб).

DataGridView отлично отображается на моем компьютере как в версиях выпуска, так и в версиях отладки. Я также попытался опубликовать приложение и установить его на том же компьютере, и у меня вообще не было проблем.

К сожалению, когда одно и то же приложение публикуется и устанавливается на другом компьютере, 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);
    }
}
 

Комментарии:

1. вы пробовали использовать отладочный код? dt — это заполнение или нет?

2. Таблица данных заполнена, на моей машине все работает отлично. Единственная проблема возникает, когда я пытаюсь запустить его на другой машине. Я также совершенно уверен, что проблема не в расположении базы данных, поскольку она заполняет все остальные datagridviews и загружает все необходимые списки со списком без проблем

3. Итак, в каком состоянии возникает проблема? если другие работают

4. @Squishablez, введенного вами кода недостаточно, чтобы указать на проблему. Даже тогда я подозреваю, что региональные настройки на вашем компьютере и другом компьютере могут отличаться, что приводит к сбою сравнения дат, что приводит к неожиданному потоку приложений и, наконец, datagridview ничего не показывает.

5. Вам нужно будет либо выполнить отладку на другом компьютере, либо записать журналы, которые показывают вам состояния, например, количество строк с данными и т.д.. Мы не можем помочь ни с тем, ни с другим.

Ответ №1:

По-видимому, пустой datagridview вызван тем фактом, что я использую подготовленный оператор. С самим оператором проблем нет, просто так получилось, что этот раздел кода плохо работает с подготовленным оператором.

Исходя из того, что я прочитал до сих пор, это обычно вызвано разными / более старыми версиями SQL Express и / или .NET Framework (иногда обеими).

Поскольку этот раздел кода на самом деле не требует использования подготовленного оператора, я изменил его на простую sqlcommand вместо этого, поскольку не будет никакого пользовательского ввода, кроме нажатия кнопок, и проблема была решена.

Решение было применимо только в этом случае, поскольку пользовательский ввод текста не требуется, а установка / обновление SQL / .NET framework не является жизнеспособным вариантом, поскольку целевая машина довольно старая и ей не хватает места на диске (помимо других причин, включая устаревшее оборудование и программное обеспечение, но не ограничиваясь ими).)

(Спасибо за весь ваш вклад, они оказали огромную помощь в гораздо более быстром отслеживании проблемы.)