C# 如何将字符附加到列表框 DisplayMember?

标签 c# .net winforms

我有一个列表框,其中绑定(bind)了一个数据表。数据表有两列,“CMM”和“位置”。 “CMM”是一个/两位整数,用作列表框的 DisplayMember,“Location”是一个一位整数,等于 1 或 2。如果 Location 列等于 2,我想添加一个星号显示在列表框中。我试图避免将 drawitem 用于列表框。

最佳答案

您可以使用 ListBox.Format有条件地改变显示值的事件

编辑: 添加了一个示例:

在设计时,您需要创建一个 ListBox 控件并将 DisplayMember 属性分配给 CMM

private void Form1_Load(object sender, EventArgs e) {
    DataTable dt = InitData();
    listBox1.DataSource = dt;
}

private static DataTable InitData() {
    DataTable dt = new DataTable();
    dt.Columns.Add("CMM", typeof(int));
    dt.Columns.Add("Location", typeof(int));
    DataRow row = dt.NewRow();
    row["CMM"] = 25;
    row["Location"] = 1;
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["CMM"] = 26;
    row["Location"] = 2;
    dt.Rows.Add(row);
    row = dt.NewRow();
    row["CMM"] = 27;
    row["Location"] = 21;
    dt.Rows.Add(row);
    return dt;
}

private void listBox1_Format(object sender, ListControlConvertEventArgs e) {
    //We assigned dataTable with DataRows, but e.ListItem is DataRowView ¿?
    DataRowView rowView = e.ListItem as DataRowView;
    if (rowView != null) {
        e.Value = ((int)rowView.Row["Location"] == 2) ? "*" + rowView.Row["CMM"].ToString() : rowView.Row["CMM"];
    }
}

关于C# 如何将字符附加到列表框 DisplayMember?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997760/

相关文章:

c# - Windows 窗体在执行中抛出与视觉样式相关的异常

c# - Winforms 主 UI 线程主体恢复到以前的状态

c# - 不支持错误

c# - 如何设计处理(真实)契约(Contract)的数据模型?

c# - LINQ 和唯一 ID

.net - 是否可以用使用不同 key 签名的程序集来替换强名称程序集?

c# - 最大化另一个正在运行的程序的窗口

C# 反序列化具有多个对象的 JSON 数组

c# - 在 Windows 窗体中嵌入 DOS 控制台

c# - Windows 窗体分隔符控件