近期學習C#開發一個管理系統,后台采用PostgreSql數據庫,第一次使用數組作為字段類型,因為C#類型基礎不牢,頻繁報錯,取不到想要的值,網上資料也較少,搜到的問題,基本沒有可以參考的答案;
在用dataGridView控件展示有以“數組”為字段類型的列時,要指定DataPropertyName,顯示的結果不能直接引用 ,要進行處理后才能顯示;
一、PG數據庫腳本
DROP TABLE IF EXISTS "public"."test1"; CREATE TABLE "public"."test1" ( "id" int4, "col1" int4[], "col2" int4[], "col3" text[][] COLLATE "pg_catalog"."default" ) ; INSERT INTO "public"."test1" VALUES (1, '{1,2}', NULL, NULL); INSERT INTO "public"."test1" VALUES (2, '{1,2}', NULL, NULL); INSERT INTO "public"."test1" VALUES (3, '{1,2}', NULL, NULL);
二、datagridiew中編輯列及綁定;
如果不在dataGridView1中綁定每列的數據源,則COL1,COL2,COL3數組列不會自動顯示;
以下是沒有指定DataPropertyName的運行效果,只有id列:
三、運行顯示結果
程序直接運行,dataGridView列中的內容為Int32[] Array .
四、幾種不同的取值結果:
以下是以在DataTAble中的結果來演示說明 ,如果直接取值會是:System.Int32[];
取他的類型顯示是Object , 但是打斷點測試時,可以看到他的內容是表格;
在窗體的load事件中加入以下代碼:(只取了第一行,COL1列的數據做演示)
DataTable dt = DBHelperPg.ExecuteDataTable("select * from test1"); --DBHelperPg.ExecuteDataTable是我封裝的SQL類和方法
dataGridView1.DataSource = dt;
textBox1.Text = Convert.ToString(dt.Rows[0][1]); textBox2.Text = Convert.GetTypeCode(dt.Rows[0][1]).ToString(); var abdc = dt.Rows[0][1]; Array a = new Array[3]; a = (Array) abdc; textBox3.Text = ((Array)dt.Rows[0][1]).ToString(); textBox4.Text = CommFunc.IntArrayToString(a);
var ddc = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[1].Value; textBox1.Text = Convert.ToString(ddc); textBox2.Text = Convert.GetTypeCode(ddc).ToString(); Array a = new Array[3]; a = (Array) ddc; textBox3.Text = ((Array)a).ToString(); textBox4.Text = CommFunc.IntArrayToString(a);
以DataGridView控件取值 為例;
附:整形數組轉字符串函數(通過object類型強轉過來的適應,用int[]定義的應該要簡單 些)
/// <summary> /// 整形數組轉字符串 /// </summary> /// <param name="intParam">整形數組</param> /// <returns>字符串</returns> public static string IntArrayToString(Array intParam) { string str = ""; try { foreach (int i in intParam) { str += i.ToString() + ","; } } catch { } return str; }