绑定DataGridView时出现值无效错误

gunziyang 2013-09-02 08:04:08
代码和报错如下,改写自msdn里的例子,我想让Title这个ComboxColumn显示的是King或Sir的文字,然后值是0或1。

问题1:为什么会出现这个错误,该如何修改?
问题2:有时候(不是在这个代码中出现的问题)在某个单元格下拉列表选择了King之后,当焦点离开这个单元格之后,该单元格会变成value的数字形式,即选了King,鼠标离开单元格后,单元格会变成0,这是为什么,该如何修改?

小弟分不多,还请大家多多包涵,先谢谢了!



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestDataGridViewComboBoxColumn
{
public partial class Form1 : Form
{
BindingSource bindingSource1 = new BindingSource();
DataGridView dataGridView1 = new DataGridView();


public enum Title
{
King,
Sir
}

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
EnumsAndComboBox_Load(null, null);
}

private void EnumsAndComboBox_Load(object sender, System.EventArgs e)
{
// Populate the data source.

bindingSource1.Add(new Knight(Title.King));
bindingSource1.Add(new Knight(Title.King));
bindingSource1.Add(new Knight(Title.Sir));
bindingSource1.Add(new Knight(Title.Sir));
bindingSource1.Add(new Knight(Title.Sir));

// Initialize the DataGridView.
dataGridView1.AutoGenerateColumns = false;
dataGridView1.AutoSize = true;
dataGridView1.DataSource = bindingSource1;

dataGridView1.Columns.Add(CreateComboBoxWithEnums());



// Initialize the form.
this.Controls.Add(dataGridView1);
this.AutoSize = true;
this.Text = "DataGridView object binding demo";
}

DataGridViewComboBoxColumn CreateComboBoxWithEnums()
{
DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();

combo.ValueType = typeof(Title);
combo.DataSource = new Title[]{Title.King, Title.Sir}
.Select(element => new {display = element.ToString(), value = Convert.ToInt32(element) })
.ToList();
combo.DisplayMember = "display";
combo.ValueMember = "value";
combo.DataPropertyName = "Title";
combo.Name = "Title";
return combo;
}
#region "business object"
private class Knight
{

private Title hisTitle;

public Knight(Title title)
{
hisTitle = title;

}

public Knight()
{
hisTitle = Title.Sir;

}


public Title Title
{
get
{
return hisTitle;
}
set
{
hisTitle = value;
}
}
}
#endregion
}
}

...全文
100 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunziyang 2013-09-03
  • 打赏
  • 举报
回复
自己顶一个,请大家帮帮忙啊

110,538

社区成员

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

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

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