某字段为int类型,需要在DataGridView中显示对应文本,(如1显示"男",2显示"女",3显示"阴阳人"),此列只用于显示,而不需要修改,因此不想将 ColumnType 设置为 DataGridViewComboBoxColumn 。
修改dataGridView1_DataBindingComplete事件
string s;
string a=dataGridView1.Rows[i].Cells["sex"].Value.ToString();
switch(a)
{case "1":s="男";break;case "2":s="女";break;case "3":s="阴阳人";break;default:s="";return;}
dataGridView1.Rows[i].Cells["sex"].Value = s;
却在运行中提示"不是 Int32 的有效值";请问高手是怎么实在这个的??谢谢!!!

解决方案 »

  1.   

    试试 DataGridView.CellFormatting 事件。 
      

  2.   

    新增一列,列名SEXCHINESE,不要数据绑定
    把SEX列隐藏
    string s; 
    string a=dataGridView1.Rows[i].Cells["sex"].Value.ToString(); 
    switch(a) 
    {case "1":s="男";break;case "2":s="女";break;case "3":s="阴阳人";break;default:s="";return;} 
    dataGridView1.Rows[i].Cells["SEXCHINESE"].Value = s; 其实用DataGridViewComboBoxColumn ,把 DisplayStyle属性设定为Nothing,就和TEXTBOX效果一样
      

  3.   

    加多个模板列如下:
    <asp:TemplateField HeaderText="性别">
      <ItemTemplate>
     <asp:Label ID="lblSex" runat="server" Text='<%#ReturnSeX(Eval("sex").ToString())>'></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
    后台把添加ReturnSeX这个方法
    pubulic string ReturnSeX(string str)
    {
       if(str=="1")
       return "男";
       else if (str=="2")
       return "女";
       else return "阴阳人";
    }
      

  4.   

    直接在sql里面就可以查询出来。
    用case when
    select (case when sex='1' then '男' when sex='2' then '女' when sex='3' then '阴阳人' else '' end) as sex from 您的表
      

  5.   


    这个方法我试过的,如果对DataGridView 进行排序(点列标题的那种),就乱套了,不过用ComboBoxColumn倒真是可行,谢谢了~~