C# WinForm开发系列之DataRepeater控件的使用(显示数据的基础使用和自定义使用)

xiaoxiao2021-02-27  225

为了更加熟悉,尽可能在研究可能会使用到的控件的使用和自定义,下面事一些我研究的关于DataRepeater控件的使用:

1.因为微软自带的DataRepeater的样式不太适实际的使用,所以为了使DataRepeater更好的使用,我首先介绍一下关于DataRepeater控件的样式自定义和自定义属性方法,

代码如下:

public partial class MyOwnerDataRepeater : DataRepeater     {         public MyOwnerDataRepeater()         {             InitializeComponent();             this.InitProperty();             this.InitStyle();         }

        #region 样式调整         private void InitProperty()         {             this.AllowUserToAddItems = false;             this.AllowUserToDeleteItems = false;

            this.ItemHeaderSize = 0;             this.ItemHeaderVisible = false;             this.Padding = new Padding(0);         }

        private void InitStyle()         {             this.ItemTemplate.Margin = new Padding(0);         }         #endregion

        #region 自动计算高度         private bool _AutoHeight = true;         /// <summary>         /// 自动计算高度         /// </summary>         [Description("自动计算高度"), Category("自定义属性"), DefaultValue(true)]         public bool AutoHeight         {             get             {                 return _AutoHeight;             }             set             {                 this._AutoHeight = value;             }         }

        protected override void OnDataSourceChanged(EventArgs e)         {           //此处省略         }

        protected override void OnBindingContextChanged(EventArgs e)         {             //此处省略         }

        protected void BindingChange()         {             //此处省略         }

        private void ReleaseSize()         {             //此处省略

        }         #endregion     }

2.创建一个Form窗体,将控件拉到窗体中,将其Dock属性设置位Top,在DataRepeater上半区域中创建四个panel,其Dock属性都设置为Left,在在第一个panel控件中创一个

   label控件,将其AutoSize属性设置为false,然后再将其anchor属性设置为Top,left,right,效果如图1所示:

图1

在第4个panel控件中创一个LinkLabel控件,其他和上面label控件相同处理,效果如图1所示:

3.控件创建完毕,接下来就需要考虑关于数据事如何进行绑定的了,代码如下所示:

   在Form1_Load事件中

  private void Form1_Load(object sender, EventArgs e)         {             //模拟一个数据库查询到的数据             DataTable tblDatas = new DataTable("Datas");             tblDatas.Columns.Add("ID", Type.GetType("System.Int32"));             tblDatas.Columns[0].AutoIncrement = true;             tblDatas.Columns[0].AutoIncrementSeed = 1;             tblDatas.Columns[0].AutoIncrementStep = 1;             tblDatas.Columns.Add("Product", Type.GetType("System.String"));             tblDatas.Columns.Add("Version", Type.GetType("System.String"));             tblDatas.Columns.Add("Description", Type.GetType("System.String"));             tblDatas.Columns.Add("Product1", Type.GetType("System.String"));             tblDatas.Rows.Add(new object[] { null, "姓名1", "b", "c", "删除"});             tblDatas.Rows.Add(new object[] { null, "姓名2", "bb", "cc", "删除"});             tblDatas.Rows.Add(new object[] { null, "姓名3", "bbb", "ccc", "删除"});             tblDatas.Rows.Add(new object[] { null, "姓名4", "bb", "cb", "删除"});             tblDatas.Rows.Add(new object[] { null, "姓名5", "bc", "cc", "删除"});             //数据绑定方式             label3.DataBindings.Add("Text", tblDatas, "Product");             textBox3.DataBindings.Add("Text", tblDatas, "Version");             textBox4.DataBindings.Add("Text", tblDatas, "Description");             linkLabel1.DataBindings.Add("Text", tblDatas, "Product1");             //textBox3.DataBindings.Add("Text", tblDatas, "name");             //this.dataRepeater1.DataSource = tblDatas;             this.myOwnerDataRepeater1.DataSource = tblDatas;                    }

若要使每条数据显示背景颜色间隔显示,只需要在DataRepeater的DrawItem事件做出如下处理即可,代码如下:

private void myOwnerDataRepeater1_DrawItem(object sender, DataRepeaterItemEventArgs e)         {             if ((e.DataRepeaterItem.ItemIndex % 2) != 0)             // Apply the secondary back color.             {                 e.DataRepeaterItem.BackColor = Color.AliceBlue;             }             else             {                 // Apply the default back color.                 e.DataRepeaterItem.BackColor = Color.White;             }         } 说了这么多,下面展示一下我们最终的效果是怎样的,看图2所示: 图2

4.接下来,介绍一下关于DataRepeater是如何在鼠标点击时获取相应的数据,其实他是根据LinkLabel控件的LinkClicked事件进行区分的,代码如下:

  private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)         {             DataRepeaterItem cItem = this.myOwnerDataRepeater1.CurrentItem;             //在这里其实可以有多种处理方法:             //1.循环获取当前控件,获取当前记录的id,然后由id从数据库进行数据获取             //一.通过循环获取当前点击的数据             foreach(Control t in vItem.Controls)             {                 //MessageBox.Show(t.Name);                 foreach(Control t1 in t.Controls)                 {                    //MessageBox.Show(t.Name);                 }             }

    //2.根据当前的cItem.ItemIndex从数据库获取数据             //操作省略

   

           //3根据控件索引直接找到想要的控件,然后获取其值,再从数据库获取数据

   //三.通过索引获取当前点击的数据             Label lb =  vItem.Controls[3].Controls[0] as Label;             MessageBox.Show(lb.Text);                      }

效果如图3,4所示:

图3

图4

转载请注明原文地址: https://www.6miu.com/read-9016.html

最新回复(0)