#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 не является жизнеспособным вариантом, поскольку целевая машина довольно старая и ей не хватает места на диске (помимо других причин, включая устаревшее оборудование и программное обеспечение, но не ограничиваясь ими).)
(Спасибо за весь ваш вклад, они оказали огромную помощь в гораздо более быстром отслеживании проблемы.)