[开发笔记]-DataGridView控件中自定义控件的使用

简介:

最近工作之余在做一个百度歌曲搜索播放的小程序,需要显示歌曲列表的功能。在winform中采用DataGirdView来实现。

很久不写winform程序了,有些控件的用法也有些显得生疏了,特记录一下。

先看一下测试程序的效果:

 

完整的程序代码:

复制代码
   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<Link> list = new List<Link>();
            list.Add(new Link { Uid = 1, Ulink = "http://www.baidu.com/" });
            list.Add(new Link { Uid = 2, Ulink = "http://www.cnblogs.com/babycool" });
            list.Add(new Link { Uid = 3, Ulink = "" });  //http://www.youku.com/
            list.Add(new Link { Uid = 4, Ulink = "http://www.xiaomi.com/" });

            DataGridViewCheckBoxColumn colum1 = new DataGridViewCheckBoxColumn();
            DataGridViewButtonColumn colum2 = new DataGridViewButtonColumn();
            DataGridViewTextBoxColumn colum3 = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn colum4 = new DataGridViewTextBoxColumn();

            //自定义列  CheckBox
            //name值或HeaderText值为标头显示的文字
            colum1.Name = "check";


            //自定义列  Button
            colum2.Name = "butt";
            colum2.Text = "按钮";
            //colum2.Tag = "Ulink";
            //colum2.DataPropertyName = "Ulink";
            //button列不绑定数据

            //设置显示单元格的按钮文本
            colum2.UseColumnTextForButtonValue = true;
            //调整列宽
            //colum2.Width = 60;

            //自定义列  TextBox
            colum3.Name = "link";
            colum3.DataPropertyName = "Ulink";
            //设置列不显示
            colum3.Visible = false;
            dataGridView1.Columns.Add(colum1);
            dataGridView1.Columns.Add(colum2);
            dataGridView1.Columns.Add(colum3);
            dataGridView1.Columns.Add(colum4);

            colum4.Name = "id";
            colum4.DataPropertyName = "Uid";
            //设置单元格 只读
            colum4.ReadOnly = true;

            //不自动生成列
            dataGridView1.AutoGenerateColumns = false;
            //单击单元格选中整行
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            //自动跳转列宽
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//自动调整列宽 填充显示
            //DisplayedCell 
            /*
             通过设定AutoSizeColumnsMode或AutoSizeRowsMode属性,列或行可以根据单元格的内容变更,自动调整,但是经常使用这种方法,运行速度就会低下。尤其当行或列数量比较多时,更为明显。

这时,可以替换AllCells而设定DisplayedCells,只对当前显示单元格的内容自动调整,这样就可以提高执行速度。
             */
            //自动调整行高
            dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders;
            //调整列宽 在整个控件设置为自动跳转列宽之后在单独设置该列的宽度
            colum2.Width = 60;
            dataGridView1.DataSource = list;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //获取点击事件发生的列名Name为butt的控件
            if (dataGridView1.Columns[e.ColumnIndex].Name == "butt")
            {
                //考虑url中如果没有值的情况 为“”
                object url = dataGridView1.Rows[e.RowIndex].Cells[2].Value;
                if (url != null && url.ToString() != "")
                {
                    //string url = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();
                    // MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString());
                    //在ie浏览器中打开
                    //  System.Diagnostics.Process.Start("iexplore.exe",url);//指定在ie浏览器中打开
                    //在默认浏览器中打开
                    System.Diagnostics.Process.Start(url.ToString());
                }
                else
                {
                    //网址中如果为空的情况
                    MessageBox.Show("为空");
                }
            }
        }



        private void button1_Click(object sender, EventArgs e)
        {
            List<int> idlist = new List<int>();
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1["check", i].Value != null)
                {
                    if ((bool)dataGridView1["check", i].Value == true)
                    {
                        //获取所有checkbox选中项的Uid值
                        idlist.Add(Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value.ToString()));
                    }
                }
            }
            //遍历
            for (int i = 0; i < idlist.Count; i++)
            {
                MessageBox.Show(idlist[i].ToString());
            }
        }
    }



    public class Link
    {
        public int Uid { get; set; }
        public string Ulink { get; set; }
    }
复制代码
相关文章
|
Web App开发
艾伟:WinForm控件开发总结(三)------认识WinForm控件常用的Attribute
在前面的文章里我们制作了一个非常简单的控件。现在我们回过头来看看这些代码透露出什么信息。   这个类是直接从Control类派生出来的,自定义控件都是直接从Control类派生出来的。这个类定义了一个属性TextAlignment,用来控制文本在控件中显示的位置:           ...
977 0
|
C#
WPF DataGrid 每行ComboBox 内容不同的设置方法
原文:WPF DataGrid 每行ComboBox 内容不同的设置方法 ...
1049 0
|
C# Windows
WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法
原文:WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法 一、WPF 中获取和设置鼠标位置   方法一:WPF方法   Point p = Mouse.GetPosition(e.
987 0
|
C#
wpf 深度复制控件,打印控件
原文:wpf 深度复制控件,打印控件 ...
1001 0

热门文章

最新文章