DataGridView 未显示 table 中的所有列

DataGridView is not showing all columns from table

我的 PostgreSQL 数据库中有以下 table:

 Table "public.ads"
        Column        |            Type             | Collation | Nullable |              Default
----------------------+-----------------------------+-----------+----------+-----------------------------------
 idad                 | integer                     |           | not null | nextval('ads_idad_seq'::regclass)
 uidowner             | integer                     |           |          |
 month                | integer                     |           |          |
 year                 | integer                     |           |          |
 mileage              | integer                     |           |          |
 idmake               | integer                     |           |          |
 idmodel              | integer                     |           |          |
 idmotor              | integer                     |           |          |
 idbodytype           | integer                     |           |          |
 description          | text                        |           |          |
 createdat            | timestamp without time zone |           | not null |
 optionalequipmentids | character varying[]         |           |          |
 photos               | character varying[]         |           |          |
 price                | integer                     |           |          |
 generaldata          | jsonb                       |           |          |
 vehicledata          | jsonb                       |           |          |
 engineenvironment    | jsonb                       |           |          |
 conditionmaintenance | jsonb                       |           |          |
 idfueltype           | integer                     |           |          |
Indexes:
    "ads_pk" PRIMARY KEY, btree (idad)
Foreign-key constraints:
    "ads_idbodytype_fkey" FOREIGN KEY (idbodytype) REFERENCES bodytype(idbodytype) ON UPDATE CASCADE
    "ads_idfueltype_fkey" FOREIGN KEY (idfueltype) REFERENCES fueltype(idfueltype) ON UPDATE CASCADE
    "ads_idmake_fkey" FOREIGN KEY (idmake) REFERENCES make(idmake) ON UPDATE CASCADE
    "ads_idmodel_fkey" FOREIGN KEY (idmodel) REFERENCES model(idmodel) ON UPDATE CASCADE
    "ads_idmotor_fkey" FOREIGN KEY (idmotor) REFERENCES motor(idmotor) ON UPDATE CASCADE

我创建了用上面 table 中的数据填充 DataGridView 的方法,这里是代码部分:

private void FillDataGridAds()
        {
            if (!connected) return;

            string cmdString = string.Empty;

            try
            {
                cmdString = "SELECT * FROM ads";
                NpgsqlCommand command = new NpgsqlCommand(cmdString, conn);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridAds.DataSource = dt.DefaultView;
            }
            catch (NpgsqlException ex)
            {
                textBox1.AppendText("PostgreSQL exception: " + ex.Message + Environment.NewLine);
            }
            catch (Exception ex)
            {
                textBox1.AppendText("Exception ex: " + ex.Message + Environment.NewLine);
            }
        }

我的 dataGridAds 的设计器部分代码

// 
            // dataGridAds
            // 
            this.dataGridAds.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.dataGridAds.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridAds.ContextMenuStrip = this.contextMenuStrip1;
            this.dataGridAds.Location = new System.Drawing.Point(9, 49);
            this.dataGridAds.Name = "dataGridAds";
            this.dataGridAds.RowHeadersWidth = 51;
            this.dataGridAds.RowTemplate.Height = 29;
            this.dataGridAds.Size = new System.Drawing.Size(1326, 549);
            this.dataGridAds.TabIndex = 0;
            this.dataGridAds.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridAds_CellEndEdit);
            // 

问题:

出于某种原因,当触发填充 dataGridAds 的方法时,dataGridAds 显示除 optionalequipmentidsphotos 之外的所有列,所以有人知道哪里会出现问题吗,我想弄清楚问题可能出在哪里,但未成功,与我的应用程序中的另一个 tables 有同样的问题,希望尽快修复,提前谢谢大家。

列都是data-type character varying[]我假设其他表中有相同问题的列是相同的data-type.
您可以尝试使用 CAST。以下带有问题列的带有 CASE 的 nomnative SELECT 的脚本是否有效?
如果 CAST( ... AS VARCHAR(1000)) 不起作用,您也可以尝试
CAST( ... AS VARCHAR)

private void FillDataGridAds()
        {
            if (!connected) return;

            string cmdString = string.Empty;

            try
            {
                cmdString = 
"SELECT 
 idad                 ,
 uidowner             ,
 month                ,
 year                 ,
 mileage              ,
 idmake               ,
 idmodel              ,
 idmotor              ,
 idbodytype           ,
 description          ,
 createdat            ,
CAST( optionalequipmentids AS VARCHAR(1000)),
CAST( photos             AS VARCHAR(1000)),
 price                ,
 generaldata          ,
 vehicledata          ,
 engineenvironment    ,
 conditionmaintenance ,
 idfueltype FROM ads";

                NpgsqlCommand command = new NpgsqlCommand(cmdString, conn);
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
                DataTable dt = new DataTable();
                da.Fill(dt);
                dataGridAds.DataSource = dt.DefaultView;
            }
            catch (NpgsqlException ex)
            {
                textBox1.AppendText("PostgreSQL exception: " + ex.Message + Environment.NewLine);
            }
            catch (Exception ex)
            {
                textBox1.AppendText("Exception ex: " + ex.Message + Environment.NewLine);
            }
        }