Как в сетке данных просматривать формат ячейки на основе запроса выбора SQL.(Vb.net) - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в VB.NET. Я из мира PHP.Я пытаюсь взять мою веб-программу и превратить ее в настольное приложение.Я немного искал здесь, но ничто не указывает мне правильное направление.

Это фрагмент моего PHP

    $sql = "SELECT tblUnitMaster.UnitID, tblUnitMaster.JobCode, 
    tblUnitMaster.ReadyToShip, tblUnitMaster.TestComplete, 
    tblUnitMaster.APCD, tblUnitMaster.APHOD, tblUnitMaster.UnitLocation,  
    tblJobMaster.NatAccount, tblUnitMaster.JobNumber, 
    tblUnitMaster.ProductionReady, tblUnitMaster.EngineeringReady FROM 
    tblJobMaster\n"
    . "LEFT JOIN tblUnitMaster\n"
    . "ON tblJobMaster.JobNumber=tblUnitMaster.JobNumber\n"
    . "WHERE tblUnitMaster.UnitLocation = 'Bay_1' ";


   while ($row=$result->fetch_array())
  {

  echo "<tr>";

  if($row[2]> NULL)
  echo '<td bgcolor=#001EFF><font size=3><a 
  href="http://fisenusa.net/pm/pmUnitMaster2.php?JobNumber=' . $row[8] . 
  '&UnitID=' . $row[0] . '&Username=' . $Username . ' 
  ">',substr($row[0],0,4) , $row[1] , substr($row[0],4,3),'</a></font> 
  </td>'; // ReadyToShip

  else if($row[9]> NULL)
  echo '<td bgcolor=#820F0E><font size=3><a 
  href="http://fisenusa.net/pm/pmUnitMaster2.php?JobNumber=' . $row[8] . 
  '&UnitID=' . $row[0] . '&Username=' . $Username . ' 
  ">',substr($row[0],0,4) , $row[1] , substr($row[0],4,3),'</a></font> 
  </td>'; // ProductionReady

  else if($row[10]> NULL)
  echo '<td bgcolor=#646363><font size=3><a 
  href="http://fisenusa.net/pm/pmUnitMaster2.php?JobNumber=' . $row[8] . 
  '&UnitID=' . $row[0] . '&Username=' . $Username . ' 
  ">',substr($row[0],0,4) , $row[1] , substr($row[0],4,3),'</a></font> 
  </td>'; // EngineeringReady

Все это работает так, как должно, и просто фрагмент того, что я пытаюсь сделать в VB.NET

Теперь к вопросу.У меня есть сетевое представление, которое я заполняю из запроса SQL.

    'Data Grid OutSide

     Dim connecttion As New MySqlConnection("server=*********;" & 
     "user id=*******;" & "password=********;" & "database=*******;")

     Dim table0 As New DataTable()

     Dim adapter0 As New MySqlDataAdapter("SELECT UnitID, APHOD, 
         ReadyToShip, TestComplete, APCD FROM 
         forest.unit_master WHERE UnitLocation = 'Here'", connecttion)

     UnitLocationOutSide.Columns(0).DataPropertyName = "UnitID"

     adapter0.Fill(table0)

     UnitLocationOutSide.DataSource = table0

Это работает в том смысле, что заполняет сетку данных всеми результатами из запроса.Мой вопрос: как мне перейти от отображения всего SQL-запроса в представлении данных к отображению только «UnitID»?и ячейка другого цвета, основанная на результатах запроса SQL?

например, в PHP я бы сделал следующее

      if($row[2]> NULL)
       echo '<td bgcolor=#001EFF><font size=3><a 
       href="http://fisenusa.net/pm/pmUnitMaster2.php?JobNumber=' . 
       $row[8] . 
       '&UnitID=' . $row[0] . '&Username=' . $Username . ' 
       ">',substr($row[0],0,4) , $row[1] , substr($row[0],4,3),'</a> 
       </font> 
       </td>'; // ReadyToShip

, поэтому в этом примере я показываю толькоUnitID, но эта ячейка синего цвета, потому что дата готовности к отправке больше, чем NULL.

Извините, что так долго, кстати.вернуться к вопросам

Как выполнить запрос SQL, но только отобразить «UnitID» в сетке данных для VB.net?

Как отформатировать эту ячейку в определенный цвет на основедругие критерии SQL-запроса для VB.net?

Ниже приводится то, что я работаю до сих пор.Опять же, например, то, что я хочу выполнить, скажем, задание 1113F-01, расположенное снаружи, завершило тестирование.все, что я хочу, это чтобы фон этой ячейки был синим.

enter image description here

Ниже приведено то, чего я достиг в PHP, но пытаюсь преобразовать его, так сказать, в VB.NET

enter image description here

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете использовать свои данные, чтобы заполнить список желаемого пользовательского класса.затем просмотрите таблицу данных после завершения привязки данных, чтобы отформатировать ячейки так, как вы хотите.Я собрал все это довольно быстро, так что можно сделать множество улучшений, но это дает вам общее представление о том, чего, я думаю, вы пытаетесь достичь.

Вот очень минимальный пример ...

using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace DataGridviewCustomCellColor_58084907
{
    public partial class Form1 : Form
    {
        BindingList<dgvEntry> dgv1_Data = new BindingList<dgvEntry>();
        BindingList<dgvEntry> dgv2_Data = new BindingList<dgvEntry>();
        BindingList<dgvEntry> dgv3_Data = new BindingList<dgvEntry>();

        public Form1()
        {
            InitializeComponent();
            initializeDGV();
            makesomedata();
        }

        private void makesomedata()
        {
            for (int i = 0; i < 5; i++)
            {
                dgv1_Data.Add(new dgvEntry($"jobid{i}", i % 2 > 0 ? "complete" : "incomplete"));
            }

            for (int i = 0; i < 15; i++)
            {
                dgv2_Data.Add(new dgvEntry($"jobid{i} with longer title", i % 4 > 0 ? "complete" : "incomplete"));
            }

            for (int i = 0; i < 10; i++)
            {
                dgv3_Data.Add(new dgvEntry($"jobid{i}", i % 3 > 0 ? "complete" : "incomplete"));
            }
        }

        private void initializeDGV()
        {
            dgv_1.DataSource = dgv1_Data;
            dgv_2.DataSource = dgv2_Data;
            dgv_3.DataSource = dgv3_Data;
            dgv_1.Columns[1].Visible = false;
            dgv_2.Columns[1].Visible = false;
            dgv_3.Columns[1].Visible = false;

            dgv_1.AllowUserToAddRows = false;
            dgv_1.AllowUserToDeleteRows = false;
            dgv_2.AllowUserToAddRows = false;
            dgv_2.AllowUserToDeleteRows = false;
            dgv_3.AllowUserToAddRows = false;
            dgv_3.AllowUserToDeleteRows = false;

            dgv_1.RowHeadersVisible = false;
            dgv_2.RowHeadersVisible = false;
            dgv_3.RowHeadersVisible = false;

            dgv_1.BorderStyle = BorderStyle.None;
            dgv_2.BorderStyle = BorderStyle.None;
            dgv_3.BorderStyle = BorderStyle.None;

            dgv_1.BackgroundColor = BackColor;
            dgv_2.BackgroundColor = BackColor;
            dgv_3.BackgroundColor = BackColor;

            dgv_1.DataBindingComplete += dgvDoneBindingData;
            dgv_2.DataBindingComplete += dgvDoneBindingData;
            dgv_3.DataBindingComplete += dgvDoneBindingData;
        }

        private void dgvDoneBindingData(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            //color the cells accordingly
            foreach (DataGridViewRow item in ((DataGridView)sender).Rows)
            {
                switch (((dgvEntry)item.DataBoundItem).jobstatus)
                {
                    case "complete":
                        item.Cells[0].Style.BackColor = Color.Red;
                        break;
                    case "incomplete":
                        item.Cells[0].Style.BackColor = Color.Green;
                        break;
                    default:
                        break;
                }
            }

            //the resizing shenanigans
            //autosize to get the width you need
            dgv_1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgv_2.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            dgv_3.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            int width1 = dgv_1.Columns[0].Width;
            int width2 = dgv_2.Columns[0].Width;
            int width3 = dgv_3.Columns[0].Width;

            //don't need autosize anymore
            dgv_1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            dgv_2.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            dgv_3.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;

            //set the column width
            dgv_1.Columns[0].Width = width1;
            dgv_2.Columns[0].Width = width2;
            dgv_3.Columns[0].Width = width3;

            //set the datagridview width
            dgv_1.Width = width1 + dgv_1.Columns[0].DefaultCellStyle.Padding.Right + dgv_1.Columns[0].DefaultCellStyle.Padding.Left + dgv_1.Columns[0].DividerWidth + 3;
            dgv_2.Width = width2 + dgv_2.Columns[0].DefaultCellStyle.Padding.Right + dgv_2.Columns[0].DefaultCellStyle.Padding.Left + dgv_2.Columns[0].DividerWidth + 3;
            dgv_3.Width = width3 + dgv_3.Columns[0].DefaultCellStyle.Padding.Right + dgv_3.Columns[0].DefaultCellStyle.Padding.Left + dgv_3.Columns[0].DividerWidth + 3;

            //set the datagridview height
            dgv_1.Height = dgv_1.ColumnHeadersHeight * (dgv_1.Rows.Count + 2);
            dgv_2.Height = dgv_2.ColumnHeadersHeight * (dgv_2.Rows.Count + 2);
            dgv_3.Height = dgv_3.ColumnHeadersHeight * (dgv_3.Rows.Count + 2);

        }
    }

    public class dgvEntry
    {
        public string jobid { get; set; }
        public string jobstatus { get; set; }

        public dgvEntry(string JobId, string JobStatus)
        {
            jobid = JobId;
            jobstatus = JobStatus;
        }
    }
}

В моем примере 3 сетки данных dgv_1 dgv_2 dgv_3 находятся в FlowLayoutPanel

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...