如何在CheckedListBox中仅显示部分文本

时间:2015-07-31 05:42:17

标签: c# winforms list checkboxlist

我正在创建一个WindowsForms应用程序,该应用程序正在使用具有4个参数(ID,名称,姓氏,权限)的人员列表:

public List<Osoba> ListaOsoba()
        {
            Osoba nr1 = new Osoba(1, "Name", "Surname", Permissions.Administrator);
            Osoba nr2 = new Osoba(2, "Name2", "Surname2", Permissions.Użytkownik);
            Osoba nr3 = new Osoba(3, "Name3", "Surname3", Permissions.Użytkownik);
            listaOsób.Add(nr1);
            listaOsób.Add(nr2);
            listaOsób.Add(nr3);

            return listaOsób;
        }

我想将所有这些参数发布到CheckedListBox,但只向用户显示名称和姓氏。 ID和权限应该被隐藏,但它们需要存在,因为我想稍后使用它们。

我们将不胜感激。

4 个答案:

答案 0 :(得分:1)

  public static bool CheckBoxListPopulate(CheckBoxList CbList, IList<T> liSource, string TextFiled, string ValueField)
    {
        try
        {

            CbList.Items.Clear();
            if (liSource.Count > 0)
            {
                CbList.DataSource = liSource;
                CbList.DataTextField = TextFiled;
                CbList.DataValueField = ValueField;
                CbList.DataBind();
                return true;
            }
            else { return false; }
        }
        catch (Exception ex)
        { throw ex; }
        finally
        {

        }
    }
  1. 此处Cb列表是控件名称和
  2. 列表项Ilist是列表源名称
  3. 文本字段(应该是连接)=“名称”+“姓氏”
  4. 值字段将被隐藏,可以是“1,2,3”
  5. 因此用户只能看到文本字段

答案 1 :(得分:0)

仅将名称和姓氏绑定到checkboxlist第一个商店名称和姓氏,然后尝试:

NameS = "Name" + "Surname";

((ListBox)checkedListBox).DataSource = listaOsób;
((ListBox)checkedListBox).DisplayMember = "NameS";

答案 2 :(得分:0)

试试这个,在这里你必须为DisplayName和HiddenId等显示和值成员制作任意复合属性,然后你就可以轻松地与checkedlistbox绑定。

public class Osoba
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Permissions Permission { get; set; }
    public string DisplayName { get; set; }
    public string HiddenId { get; set; }
    public Osoba()
    { }
    public Osoba(int id, string fname, string lname, Permissions p)
    {
        Id = id;
        FirstName = fname;
        LastName = lname;
        Permission = p;
        DisplayName = FirstName + " " + LastName;
        HiddenId = Id + "_" + Permission.GetHashCode();
    }
    public void ListaOsoba()
    {
        List<Osoba> objList = new List<Osoba>();
        Osoba nr1 = new Osoba(1, "Name", "Surname", Permissions.Administrator);
        Osoba nr2 = new Osoba(2, "Name2", "Surname2", Permissions.Uzytkownik);
        Osoba nr3 = new Osoba(3, "Name3", "Surname3", Permissions.Uzytkownik);
        objList.Add(nr1);
        objList.Add(nr2);
        objList.Add(nr3);

        ((ListBox)checkedListBox1).DataSource = objList;
        ((ListBox)checkedListBox1).DisplayMember = "DisplayName";
        ((ListBox)checkedListBox1).ValueMember = "HiddenId";
        MessageBox.Show(((ListBox)checkedListBox1).Text);
        MessageBox.Show(((ListBox)checkedListBox1).SelectedValue.ToString());

    }
}
public enum Permissions
{
    Administrator,
    Uzytkownik
}

答案 3 :(得分:0)

我和SQL有类似的东西。我返回了许多专栏,但只想要一个专栏。 反正

            ArrayList arr = new ArrayList();

            foreach (object o in ListaOsoba)
            {
                arr.Items.Add(o[1].ToString()+" "+o[2].ToString());
            }

            foreach (var item in arr)
            {
                chkNames.Items.Add(arr.ToString()); //chkNames is your CheckListBox
            }

然后稍后当查询哪个ID到哪里时,循环查看原始列表,并根据姓名和姓氏组合查看谁被勾选,找到与该人相关的ID,你应该排序