none
datagridview轉換型別問題 RRS feed

  • 問題

  • 小弟目前遇到一個問題

    因為資料庫內的性別是用int 0 1表示

    但我希望撈出來在datagridview內顯示成男女

    不過轉換後都會出現型別錯誤,想請教有辦法轉換型別嗎

    撈值方法

      SqlDataAdapter Userinfo = new SqlDataAdapter(cmd);
                    DataTable Userdt = new DataTable();
                    Userinfo .Fill(Userdt );
                    dataGridView1.DataSource = Userdt ;


    • 已編輯 dodolon 2014年8月3日 上午 05:36
    2014年8月3日 上午 05:35

解答

  • 原本的寫法是

      for (int i = 0; i < Userdt.Rows.Count; i++)
    {
        if (Userdt.Rows[i]["Gender"].Equals("1"))
       {
            Userdt.Rows[i]["Gender"] = "男";
       }
        else
        {
           Userdt.Rows[i]["Gender"] = "女";
       }
    }
    但這樣會出現型別錯誤,我不知道要怎麼做到欄位的轉型

    你的資料庫型別在這個 Column 是數字, 現在要塞一個字串進去當然會轉換錯誤. 你應該在Fill 之後, 為 DataTable 增加一個 DataColumn, 把轉換的值放進那個新的 Column 中 .

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 dodolon 2014年8月4日 上午 08:18
    2014年8月3日 下午 02:33
    版主

所有回覆

  • 你的型別轉換寫在哪裡 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年8月3日 上午 06:43
    版主
  • 原本的寫法是

      for (int i = 0; i < Userdt.Rows.Count; i++)
    {
        if (Userdt.Rows[i]["Gender"].Equals("1"))
       {
            Userdt.Rows[i]["Gender"] = "男";
       }
        else
        {
           Userdt.Rows[i]["Gender"] = "女";
       }
    }
    但這樣會出現型別錯誤,我不知道要怎麼做到欄位的轉型

    2014年8月3日 上午 10:07
  • 您可以利用DataGridView控制項CellFormating事件

    2014年8月3日 下午 01:02
  • 原本的寫法是

      for (int i = 0; i < Userdt.Rows.Count; i++)
    {
        if (Userdt.Rows[i]["Gender"].Equals("1"))
       {
            Userdt.Rows[i]["Gender"] = "男";
       }
        else
        {
           Userdt.Rows[i]["Gender"] = "女";
       }
    }
    但這樣會出現型別錯誤,我不知道要怎麼做到欄位的轉型

    你的資料庫型別在這個 Column 是數字, 現在要塞一個字串進去當然會轉換錯誤. 你應該在Fill 之後, 為 DataTable 增加一個 DataColumn, 把轉換的值放進那個新的 Column 中 .

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 dodolon 2014年8月4日 上午 08:18
    2014年8月3日 下午 02:33
    版主
  • RowDataBound


    順便附上改變顏色XD

    protected void gvData_RowDataBound(object sender,GridViewRowEventArgs e) { DataRowView oRow; System.Drawing.Color oFontColor = System.Drawing.Color.Empty; if (e.Row.RowType == DataControlRowType.DataRow) { oRow = (DataRowView)e.Row.DataItem; if (int.Parse(oRow["性別"].ToString()) == 1) { e.Row.Cells[1].Text = "男人"; oFontColor = System.Drawing.Color.Red; }

    e.Row.Cells[1].ForeColor = oFontColor;

    } }



    • 已提議為解答 Alan-LiuMVP 2014年8月4日 上午 08:04
    • 已取消提議為解答 Alan-LiuMVP 2014年8月4日 上午 08:05
    2014年8月4日 上午 12:51
  • 你可以在SQL Query下手腳,如

    Select case ("Gender")
    when "1" then "男"
    when "2" then "女"
    end as GenderWord
    from UserTable

    Select case ("Gender")
    when "1" then "男"
    else "女"
    end as GenderWord
    from UserTable

    http://msdn.microsoft.com/en-us/library/ms181765.aspx


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2014年8月4日 上午 01:25
  • 感謝各位提供各種方法

    因為我是winform所以採用Bill的方法解決問題了

      Userdt.Columns.Add("性別", System.Type.GetType("System.Char"));
                    Userdt.Columns["性別"].SetOrdinal(2); 
                    for (int i = 0; i < Userdt.Rows.Count; i++)
                    {
                        if (Userdt.Rows[i]["Gender"].ToString()=="1")
                        {
                            Userdt.Rows[i]["性別"] = "男";
                        }
                        else
                        {
                            Userdt.Rows[i]["性別"] = "女";
                        }
                    }
                    Userdt.Columns.Remove("Gender");
                    dataGridView1.DataSource = Userdt;

    2014年8月4日 上午 08:17