DataGridView控件中别名乱码的问题

cah黎明就在眼前 2020-07-14 08:40:45

private void FillCommodityInfo()
{
ds = new DataSet();
DBHelper dB = new DBHelper();
try
{
string sql = string.Format("select a.CommodityID 商品编号,a.CommodityName 商品名称,b.SortName 类别名称,a.CommodityPrice 商品价格," +
"IF(a.IsDiscount = 1,'是','否') 是否打折,a.ReducePrice 打折价格 from commodity as A inner join commoditysort as B on a.SortID = b.SortID");
MySqlDataAdapter msda = new MySqlDataAdapter(sql, dB.Connection);//适配器,自动打开和关闭数据库,后面无需关闭操作
msda.Fill(ds, "commodity");
this.dgvCommodity.DataSource = this.ds.Tables["commodity"];
}
catch (Exception e)
{
MessageBox.Show("数据库操作错误!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}

这是我向DataGridView中填充数据的代码,我发现我修改和删除数据的时候只要调用dgvCommodity.CurrentRow.Cells[0].Value来获取这一行的ID的时候就乱码了,添加时候没有调用它就不乱码,这是怎么回事啊,怎么解决呢?



正常状态下


点击编辑之后的乱码,我要再点击添加它又正常了,好奇怪


#region 添加事件
private void tsbtnAdd_Click(object sender, EventArgs e)
{
AddOrEdit aoe = new AddOrEdit();
aoe.Text = "添加商品信息";
aoe.commodityID = 0;//新增id传0
aoe.ShowDialog();//窗口不关闭会一直在这,关闭之后重新刷新dgv
this.FillCommodityInfo();//重新绑定dgv
}
#endregion

#region 编辑事件
private void tsbtnEdit_Click(object sender, EventArgs e)
{
AddOrEdit aoe = new AddOrEdit();
if (this.dgvCommodity.CurrentRow != null)
{

aoe.commodityID = Convert.ToInt32(dgvCommodity.CurrentRow.Cells[0].Value);//获取当前选中行的第一列中的值(使用这一句会产生乱码)
aoe.ShowDialog();
this.FillCommodityInfo();
}

}
#endregion

这是添加修改的代码。
...全文
18905 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 12 楼 front333 的回复:
那么乱码问题跟DataGridView控件没关系,而是MySql数据库的中文编码问题,数据库连接字符串中添加编码方式:CharSet=utf8,具体百度MySql中文乱码。 MySql存在中文编码的问题,需要设置好编码方式,或者不用中文别名的4种方式: 1.读取后改DataTable字段名:
this.ds.Tables["commodity"].Columns[0].ColumnName = "商品编号";
2.在DataGridView里设置列标题:
this.dgvCommodity.Columns[0].HeaderText = "商品编号";
3.设置DataGridView列:
this.dgvCommodity.AutoGenerateColumns = false;
this.dgvCommodity.VirtualMode = true;
this.dgvCommodity.Columns.Add("CommodityID", "商品编号");
4.在设计界面DataGridView里添加列。
非常感谢大佬给的这么多解决方式,感觉好像也不是数据库编码问题,我试了下在连接字符串中加了编码设置,而且数据库也是utf8,但是还是这样。我在数据库中读写中文完全没问题,而且初始加载也正常,但是点击修改之后就乱码了,我点击增加又正常了。
张元浩_HY 2020-07-23
  • 打赏
  • 举报
回复
那么乱码问题跟DataGridView控件没关系,而是MySql数据库的中文编码问题,数据库连接字符串中添加编码方式:CharSet=utf8,具体百度MySql中文乱码。
MySql存在中文编码的问题,需要设置好编码方式,或者不用中文别名的4种方式:
1.读取后改DataTable字段名:
this.ds.Tables["commodity"].Columns[0].ColumnName = "商品编号";

2.在DataGridView里设置列标题:
this.dgvCommodity.Columns[0].HeaderText = "商品编号";

3.设置DataGridView列:
this.dgvCommodity.AutoGenerateColumns = false;
this.dgvCommodity.VirtualMode = true;
this.dgvCommodity.Columns.Add("CommodityID", "商品编号");

4.在设计界面DataGridView里添加列。

  • 打赏
  • 举报
回复
引用 9 楼 front333 的回复:
试试先让控件的数据源变成空再重新绑定数据源: msda.Fill(ds, "commodity"); this.dgvCommodity.DataSource = null; this.dgvCommodity.DataSource = this.ds.Tables["commodity"];
而且我在填充ds之前对ds清空 ds.Clear()也不行
  • 打赏
  • 举报
回复
引用 9 楼 front333 的回复:
试试先让控件的数据源变成空再重新绑定数据源: msda.Fill(ds, "commodity"); this.dgvCommodity.DataSource = null; this.dgvCommodity.DataSource = this.ds.Tables["commodity"];
试了一下不行,它在填充数据源的之前ds中的表头就已经乱码了
张元浩_HY 2020-07-22
  • 打赏
  • 举报
回复
试试先让控件的数据源变成空再重新绑定数据源:
msda.Fill(ds, "commodity");
this.dgvCommodity.DataSource = null;
this.dgvCommodity.DataSource = this.ds.Tables["commodity"];
  • 打赏
  • 举报
回复
引用 7 楼 iaitoday 的回复:
建议sql中不要将数据列名重设成中文名,可以将数据列名设置到DataGridView列头中的DataPropertyName中,将显示用的中文名设置到HeaderText 虽然不知道你的问题出在哪,不妨试一下我的方法,应该可以避免出现你这种问题。
非常感谢你的意见,我现在做成这样的一个菜单,所有信息都展示在一个DataGridView中,它这个表头是动态的,这样好像就不行了是吧?
iaitoday 2020-07-21
  • 打赏
  • 举报
回复
建议sql中不要将数据列名重设成中文名,可以将数据列名设置到DataGridView列头中的DataPropertyName中,将显示用的中文名设置到HeaderText 虽然不知道你的问题出在哪,不妨试一下我的方法,应该可以避免出现你这种问题。
  • 打赏
  • 举报
回复
可有人啊
  • 打赏
  • 举报
回复
引用 4 楼 以专业开发人员为伍 的回复:
贴出你的调试器调试 Value 的截图看看。
这是点击修改后再次填充DataGridView时的dataset 点击增加之后ds又正常了
  • 打赏
  • 举报
回复
贴出你的调试器调试 Value 的截图看看。
  • 打赏
  • 举报
回复
引用 1 楼 tangyanzhi1111 的回复:
string.form 这个方法里面你看看有不有 unicode编码
大佬,可还有其他解决方法啊
  • 打赏
  • 举报
回复
你说的是string.Format()中设置编码么,我没有找到对应的重载函数
江湖评谈 2020-07-14
  • 打赏
  • 举报
回复
string.form 这个方法里面你看看有不有 unicode编码
vb.net操作DataGridView控件的用法的集合,包括: 1. DataGridView当前的单元格属性取得、变更 2. DataGridView编辑属性 3. DataGridView最下面一列新追加行非表示 4. DataGridView判断当前选行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 DataGridView控件用法合集(二) 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行高列幅自动调整 9. DataGridView指定行列冻结 10. DataGridView列顺序变更可否设定 11. DataGridView行复数选择 12. DataGridView选择的行、列、单元格取得 DataGridView控件用法合集(三) 13. DataGridView指定单元格是否表示 14. DataGridView表头部单元格取得 15. DataGridView表头部单元格文字列设定 16. DataGridView选择的部分拷贝至剪贴板 17.DataGridView粘贴 18. DataGridView单元格上ToolTip表示设定(鼠标移动到相应单元格上时,弹出说明信息) DataGridView控件用法合集(四) 19. DataGridView的ContextMenuStrip属性 20. DataGridView指定滚动框位置 21. DataGridView手动追加列 22. DataGridView全体分界线样式设置 23. DataGridView根据单元格属性更改显示内容 24. DataGridView新追加行的行高样式设置る 25. DataGridView新追加行单元格默认值设置 DataGridView输入错误数据的处理(五) 26. DataGridView单元格数据错误标签表示 27. DataGridView单元格内输入值正确性判断 28. DataGridView单元格输入错误值事件的捕获 DataGridView控件用法合集(六) 29. DataGridView行排序(点击列表头自动排序的设置) 30. DataGridView自动行排序(新追加值也会自动排序) 31. DataGridView自动行排序禁止情况下的排序 32. DataGridView指定列指定排序 DataGridView控件用法合集(七) 33. DataGridView单元格样式设置 34. DataGridView文字表示位置的设定 35. DataGridView单元格内文字列换行 36. DataGridView单元格DBNull值表示的设定 37. DataGridView单元格样式格式化 38. DataGridView指定单元格颜色设定 39. DataGridView单元格文字字体设置 40. DataGridView根据单元格值设定单元格样式 DataGridView控件用法合集(八) 41. DataGridView设置单元格背景颜色 42. DataGridView行样式描画 43. DataGridView显示行号 44. DataGridView焦点所在单元格焦点框不显示的设定 DataGridView控件用法合集(九) 45. DataGridView显示选择框CheckBox 46. DataGridView显示下拉框ComboBox 47. DataGridView单击打开下拉框 48. DataGridView显示按钮 49. DataGridView显示链接 50. DataGridView显示图像 DataGridView控件用法合集(十) 51. DataGridView编辑单元格控件取得 52. DataGridView输入自动完成 53. DataGridView单元格编辑时键盘KEY事件取得 54. DataGridView下拉框(ComboBox)单元格编辑时事件取得 55. DataGridView下拉框(ComboBox)单元格允许文字输入设定 DataGridView控件用法合集(十一) 56. DataGridView根据值不同在另一列显示相应图片 57. DataGridView显示进度条(ProgressBar) 58. DataGridView添加MaskedTextBox DataGridView控件用法合集(十二) 59. DataGridViewEnter键按下焦点移至旁边的单元格 60. DataGridView行集合化(Group)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧