zoukankan      html  css  js  c++  java
  • [开发笔记]-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; }
        }

    转载请注明出处。

  • 相关阅读:
    染色法判定二分图
    Kruskal算法求最小生成树
    Prim算法求最小生成树
    Floyd算法求多源最短路
    spfa判断负环
    java 线程的使用
    java IO基础
    数据库 EXISTS与NOT EXISTS
    数据库 何为相关查询和不相关查询?
    数据库的基础知识
  • 原文地址:https://www.cnblogs.com/babycool/p/3552864.html
Copyright © 2011-2022 走看看