Joh*_*aka 5 c# data-binding datatable datagridview winforms
我正试图在某个地方设置一些东西DataGridView.看起来这应该很简单,但我遇到了麻烦.我想显示三列:
我希望能够从所有可能的值中进行选择TypeName.这是我的困境:
如果我将所有这些加载到一个DataTable并设置DataGridView为DataSource,我可以显示该TypeName记录的现有,但组合框将不包括任何其他值.如果我将DataSourcefor 设置为包含所有可能DataGridViewComboBoxColumn的单独的DataTable,TypeNames则不显示现有值.
DataGridView 真的很烦人,所以无论是解决方案还是可行的替代方案都将受到赞赏.
编辑:看来这个问题是我想有一个单独的项目引起的DisplayMember和ValueMember.以下工作,如果我不担心设置ID为ValueMember:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "Type",
DataPropertyName = "Type"
}
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作,则会选择正确的类型,但我无法更改组合框中的选择:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "TypeID",
DataPropertyName = "TypeID"
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下内容FormatException,则会出现错误,因为它正在尝试填充:
var typeColumn = new DataGridViewComboBoxColumn
{
DataSource = typeList,
DisplayMember = "Type",
ValueMember = "TypeID",
DataPropertyName = "Type"
}
Run Code Online (Sandbox Code Playgroud)
编辑:typeList是一个简单的DataTable填充如下:
SELECT DISTINCT IT.InsuranceTypeID, IT.[Type]
FROM InsuranceType IT
WHERE IT.ClientID = @ClientID
ORDER BY [Type]
Run Code Online (Sandbox Code Playgroud)
我有一个类似的(我认为)问题,我的解决方案是设置DataSource为DataGridViewComboBoxColumn 之前设置DataSource为DataGridView.
在我的例子中,我的DataSources分别是a List<T>和a,BindingList<T>但它应该与DataTables一样:
DataGridViewComboBoxColumn categoryColumn = (DataGridViewComboBoxColumn)_ItemsGrid.Columns["CategoryID"];
categoryColumn.DataSource = categories;
_ItemsGrid.DataSource = items;
Run Code Online (Sandbox Code Playgroud)
好吧,我想出了一个例子ClientInfo,并InsuranceDetails说我认为可能会模仿你正在尝试做的。让我知道这些细节是否正确。这个例子将填充DataGridViewComboBox并设置基于所述值InsuranceDetails(具体地:InsurDetailz = all_insurance_types[2])
public partial class Form1 : Form
{
private ClientInfo _myClient;
private BindingList<InsuranceDetails> all_insurance_types =
new BindingList<InsuranceDetails>();
public Form1()
{
InitializeComponent();
DataGridView grid = new DataGridView();
grid.Dock = DockStyle.Fill;
grid.AutoGenerateColumns = true;
all_insurance_types.Add(new InsuranceDetails(1, "Health"));
all_insurance_types.Add(new InsuranceDetails(2, "Home"));
all_insurance_types.Add(new InsuranceDetails(3, "Life"));
var col = new DataGridViewComboBoxColumn
{
DataSource = all_insurance_types,
HeaderText = "Insurance Type",
DataPropertyName = "InsurDetailz",
DisplayMember = "ItType",
ValueMember = "Self",
};
_myClient = new ClientInfo {
InsurDetailz = all_insurance_types[2], Name = "Jimbo" };
grid.Columns.Add(col);
grid.DataSource = new BindingList<ClientInfo> { _myClient };
this.Controls.Add(grid);
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// make sure its updated
InsuranceDetails c = _myClient.InsurDetailz;
string name = _myClient.Name;
// Place breakpoint here to see the changes in _myClient
throw new NotImplementedException();
}
}
class ClientInfo
{
public string Name { get; set; }
public InsuranceDetails InsurDetailz { get; set; }
}
class InsuranceDetails
{
public int InsuranceTypeID { get; set; }
public String ItType { get; set; }
public InsuranceDetails Self { get { return this; } }
public InsuranceDetails(int typeId, String itType)
{
this.InsuranceTypeID = typeId;
this.ItType = itType;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17353 次 |
| 最近记录: |