首页 > 解决方案 > 使用 Winforms 使用 Combobox 绑定空值

问题描述

我有这个列表来使用dapper.

    public List<ComplaintActionsModel> GetComplaintActions(int complaintID)
    {
        using (MySqlConnection conn = new MySqlConnection(ConnectionString.ConnString))
        {
            var output = conn.Query<ComplaintActionsModel>($@"
                SELECT
                    Status
                FROM customercomplaintsactions WHERE id = {complaintID}").ToList();
            return output;
        }
    }

然后在用户单击时,我将值加载到组合框中。像这样:

List<ComplaintActionsModel> complaintsActionsList = new List<ComplaintActionsModel>();
private void update_Click(object sender, EventArgs e)
{
    int id = (int)ComplaintsData.CurrentRow.Cells[0].Value; // Get id of selected row in DataGrid

    DataAccess db = new DataAccess();

    complaintsActionsList = db.GetComplaintActions(id); // Find Status from database

    status.DataBindings.Add("Text", complaintsActionsList, "Status", true, DataSourceUpdateMode.OnPropertyChanged); // Set value of status combobox from the database
}

// Model
public class ComplaintActionsModel
{
    public string Status { get; set; }
}

问题

举个例子:

如果 MySQL 数据显示值为“Open for Investigation”,它将选择此索引:

在此处输入图像描述

接下来,如果我转到下一条记录,然后单击按钮 - 它应该在组合框中显示一个空值 - 因为有一个null值。

如果返回的值为 ,如何取消选择组合框中的项目null

标签: c#

解决方案


如果我理解你的问题,这应该会让你朝着一个好的方向前进。首先,处理 Binding.Format 事件,如下所示:

Binding b = new Binding("Text", complaintsActionsList, "Status", true);
b.Format += complaintAction_Format;
DataBindings.Add(b);

然后,当格式事件中的值为 null 时,执行您想做的任何事情,如下所示:

private void complaintAction_Format(object sender, ConvertEventArgs e)
{
    //do whatever you want to do in case of null
    e.Value = e.Value == null ? "" : e.Value;
    //or
    if(e.Value == null)
    {
        myComboBox.SelectedIndex = -1;
    }
}

推荐阅读