zoukankan      html  css  js  c++  java
  • 根据输入内容,更改ListBox(System.Windows.Forms.ListBox)项显示内容

    在做项目时,涉及到用户自定义报表,即用户可以根据自己的喜好,选择报表中需要显示的列,并可以对这些列重新命名/排序等.这些功能由报表设计器来完成.

    最初设想的是使用ListBox的SelectedIndexChanged事件,根据此事件,显示TextBox中的文本内容,并根据用户输入的新的文本内容,再次更改当前的SelectedItem的内容.不过,当更改SelectedItem时,又触发了SeletecIndexChanged事件.因此,此方法不可行.

    后来使用ListBox的Click事件来完成.

    本文章中,只是对于方法的简单介绍.因此其中的数据比较简单,且不完整.

    首先定义数据列模型,它包含列默认名称/用户自定义名称/列类型/与数据匹配的字段名等.

    代码如下:

       1: /// <summary>
       2: /// 数据列类型
       3: /// </summary>
       4: public class DataColumn
       5: {
       6:     /// <summary>
       7:     /// 默认列名
       8:     /// </summary>
       9:     public string DefaultName;
      10:     
      11:     /// <summary>
      12:     /// 用户自定义列名
      13:     /// </summary>
      14:     private string customName;
      15:     
      16:     /// <summary>
      17:     /// 此处需要提供CustomName属性,否则绑定时,DispalyMember无法正常显示.
      18:     /// (如果没有此属性,则绑定后显示为:LBTest.DataColumn)
      19:     /// </summary>
      20:     public string CustomName {
      21:         get { return customName; }
      22:         set { this.customName = value;}
      23:     }
      24:     
      25:     /// <summary>
      26:     /// 列的数据类型
      27:     /// </summary>
      28:     public string DataType;
      29:     
      30:     /// <summary>
      31:     /// 字段名称
      32:     /// </summary>
      33:     public string FieldName;
      34:     
      35:     #region 构造函数
      36:     public DataColumn()
      37:     {
      38:         this.DefaultName = "默认列名";
      39:         this.customName = "用户自定义列名";
      40:         this.DataType = "System.String";
      41:         this.FieldName = string.Empty;
      42:     }
      43:  
      44:     public DataColumn(string defaultName,string customName,string dataType,string fieldName)
      45:     {
      46:         this.DefaultName = defaultName;
      47:         this.customName = customName;
      48:         this.DataType = dataType;
      49:         this.FieldName = fieldName;
      50:     }
      51:     #endregion  构造函数
      52: }

    我们在窗体装载时,向ListBox上绑定数据.

       1: /// <summary>
       2: /// 绑定数据源
       3: /// </summary>
       4: private void InitBindData()
       5: {
       6:     DataColumn dc = new DataColumn("用户名","用户登录名称","System.String","userName");
       7:     this.lbColumn.Items.Add(dc);
       8:     dc = new DataColumn("地址","家庭住址","System.String","address");
       9:     this.lbColumn.Items.Add(dc);
      10:     dc = new DataColumn("电话","电话","System.String","tel");
      11:     this.lbColumn.Items.Add(dc);
      12:     
      13:     //此处设置要显示的属性成员名称,注意,此处要使用属性不能使用字段,否则无法显示
      14:     this.lbColumn.DisplayMember = "CustomName";            
      15: }

    之后实现ListBox双击事件,和用户更改客户端列名称显示方法

       1: /// <summary>
       2:         /// 列表框双击事件
       3:         /// </summary>
       4:         void LbColumnClick(object sender, System.EventArgs e)
       5:         {
       6:             if(this.lbColumn.SelectedIndex > -1)
       7:             {
       8:                 DataColumn dc = (DataColumn)this.lbColumn.SelectedItem;
       9:                 this.txtCustom.Text = dc.CustomName;
      10:             }
      11:         }
      12:         
      13:         /// <summary>
      14:         /// 用户输入新的客户端名称
      15:         /// </summary>
      16:         void TxtCustomTextChanged(object sender, System.EventArgs e)
      17:         {
      18:             if(this.lbColumn.SelectedIndex > -1)
      19:             {
      20:                 DataColumn dc = (DataColumn)this.lbColumn.SelectedItem;
      21:                 dc.CustomName = this.txtCustom.Text.Trim();
      22:                 this.lbColumn.Items[this.lbColumn.SelectedIndex] = dc;
      23:             }
      24:         }

    最终效果如下图所示.

    lbTest

    如注意的地方:

    1.使用Click事件代替SeletecIndexChanged事件.

    2.数据源定义中要声明属性的实现(关于这个,还要仔细研究.)

    Richie-Chen 标签: ListBox.netC#
  • 相关阅读:
    Django中多表的增删改查操作及聚合查询、F、Q查询
    路由控制
    路由、视图、模板主要知识点回顾
    创建文件linux
    关于shell,环境变量放置在?
    snprintf和string操作函数
    C/C++的存储区域的划分
    001
    SAMBA服务器
    归并排序原理详解!
  • 原文地址:https://www.cnblogs.com/RitchieChen/p/1763859.html
Copyright © 2011-2022 走看看