private string connstr = "server=127.0.0.1;user id=root; password=; database=ginliar_db; pooling=false;charset=gbk;allow zero datetime=true";
private void GetDate()
        {
            try
            {
                strconn = "select 型号,价格 from goods";
                myconn = new MySqlConnection(connstr);
                sqlda = new MySqlDataAdapter(strconn, myconn);
                ds.Clear();
                sqlda.Fill(ds, "goods");
                System.Text.Encoding.GetEncoding("gb2312").GetString(System.Text.Encoding.GetEncoding("iso-8859-1").GetBytes(row[1].ToString()));
                dataGridView1.DataSource = ds.Tables[0].DefaultView;
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            }
            catch
            {
                MessageBox.Show("网络繁忙,请稍侯重试!", "系统提示", MessageBoxButtons.OK);
            }
        }GV里显示的数据为中文正常但GV的表头就是型号、价格乱码了。请教下解决方法

解决方案 »

  1.   

    设置mysql数据库编码格式为gb2312
      

  2.   


    问题是不出在这了,你上面设置的gbk,下面又变成gb2312,然后数据库的编码是什么也不知道
      

  3.   

    全部设置为  统一的gb2312  或者 utf-8
      

  4.   

    取出来的数据 进行转码。
    /// <summary>
    /// 转换当前表中所有字符字段为中文编码
    /// </summary>
    /// <param name="dt">要转换表</param>
    /// <returns></returns>
    public static DataTable ConvertTableCH(DataTable dt)
    {
    try
    {
    if(dt.Rows.Count <1)
    {
    return dt;
    } int DTRowLen = dt.Rows.Count;
    int DTColLen = dt.Columns.Count; for(int i=0;i<=DTRowLen-1;i++)
    {
    for(int j=0;j<=DTColLen-1;j++)
    {
    if(dt.Rows[i][dt.Columns[j]].GetType().Name.ToLower() == "string")
    {
    dt.Rows[i][dt.Columns[j].ColumnName] = PublicFun.ConvertCH(dt.Rows[i][dt.Columns[j].ColumnName].ToString());
    }
    }
    }
    return dt;
    }
    catch
    {
    return dt;
    }
    } /// <summary>
    /// 转换当前表中所有字符字段为英文编码
    /// </summary>
    /// <param name="dt">要转换表</param>
    /// <returns></returns>
    public static DataTable ConvertTableEN(DataTable dt)
    {
    try
    {
    if(dt.Rows.Count <1)
    {
    return dt;
    } int DTRowLen = dt.Rows.Count;
    int DTColLen = dt.Columns.Count; for(int i=0;i<=DTRowLen-1;i++)
    {
    for(int j=0;j<=DTColLen-1;j++)
    {
    if(dt.Rows[i][dt.Columns[j]].GetType().Name.ToLower() == "string")
    {
    dt.Rows[i][dt.Columns[j].ColumnName] = PublicFun.ConvertEN(dt.Rows[i][dt.Columns[j].ColumnName].ToString());
    }
    }
    }
    return dt;
    }
    catch
    {
    return dt;
    }
    }
      

  5.   


    /// <summary>
    /// 转换当前信息为中文编码
    /// </summary>
    /// <param name="OrgString">编码前信息</param>
    /// <returns>编码后信息</returns>
    public static string ConvertCH(string OrgString)
    {
    if(OrgString == null || OrgString.Trim() == "")
    {
    return "";
    }
    Encoding Target = Encoding.GetEncoding(936);
    Encoding Orginality = Encoding.GetEncoding(1252); Byte[] org = Orginality.GetBytes(OrgString);
    return Target.GetString(org);
    } /// <summary>
    /// 转换当前信息为英文编码
    /// </summary>
    /// <param name="OrgString">编码前信息</param>
    /// <returns>编码后信息</returns>
    public static string ConvertEN(string OrgString)
    {
    if(OrgString == null || OrgString.Trim() == "")
    {
    return "";
    }
    Encoding Target = Encoding.GetEncoding(1252);
    Encoding Orginality = Encoding.GetEncoding(936); Byte[] org = Orginality.GetBytes(OrgString);
    return Target.GetString(org);
    }
      

  6.   

    谢谢mmm306306的方法。受用了。