DataGridView控件初始化,添加删除行(不绑定数据库)

转载:

http://blog.163.com/zjlovety@126/blog/static/2241862420106128264300/

也不知道是否该应用这个控件,不过也想不出该用其他什么控件,关键是俺比较菜没什么经验。

要求是这样的,用户一次添加一个任务,这个任务有三个选项,其中两个选项是用户动态输入的名称(就象图中bb和dd两列),另一个选项则是一堆数据(就象qq那列),我现在要把每个任务罗列出来,不能用treeview,不能用tabcontrol,不能用xml,最好象个表格一样清晰明朗(疯了!)每个任务对应两个按钮,一个是Run,为了跑任务,一个是Remove,为了移除任务。

 

 

当然最开始选择DataGridView就是为了满足那个“象表格一样清晰明朗”的奇怪需求,一行对应一个任务,其次貌似DataGridView控件在.net 2.0中加入了新的特征如DataGridViewButtonColumn啊,DataGridViewComboBoxColumn之类的东东。研究了一天才发现这两个东东根本派不上用场,首先DataGridViewButtonColumn中的Button跟真的Button根本没得比,既不能添加Button的Text也不好添加Click事件(应该是有方法的但还是很别扭而且也没研究);其次是DataGridViewComboBoxColumn,不仅外观上不能和真正的ComboBox相提并论,而且当你选择了其中的任一item,DataGridView就会新增一行,这跟我们的需求是完全不符合的,毕竟一个选项是不能代表一个任务的。

从网上查了很多资料,呵呵,看到一篇说可以画个控件上去,觉得很有意思。其实我就是这么做的。

(1)首先初始化DataGridView控件。

private void Form1_Load(object sender, EventArgs e)

{

DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();

            columnHeaderStyle.BackColor = Color.Beige;

            columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold);

            dataGridView1.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

            this.dataGridView1.Columns.Add("1", "bb");

            this.dataGridView1.Columns.Add("2", "qq");

            this.dataGridView1.Columns.Add("3", "dd");

            this.dataGridView1.Columns.Add("4", "aa");

}

(2)单击按钮添加一行,包括单元格和单元格的值,看似内嵌在单元格中的按钮和下拉列表

private void button4_Click(object sender, EventArgs e)

{

            DataGridViewRow dr = new DataGridViewRow();

            foreach (DataGridViewColumn c in this.dataGridView1.Columns)

            {

                dr.Cells.Add(c.CellTemplate.Clone() as DataGridViewCell);  //给行添加单元格

            }

dr.Cells[0].Value = "1111";

            dr.Cells[2].Value = "3333";

            this.dataGridView1.Rows.Add(dr);

            int index = this.dataGridView1.Rows.Count - 2;

 

            ComboBox com = new ComboBox();

            com.Name = "Containers" + index.ToString(); ;

            com.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

            com.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

            com.Items.AddRange(new object[] {

            "1",

            "2",

            "3",

            "4"});

            com.SelectedIndex = 0;

            this.dataGridView1.Controls.Add(com);

            this.dataGridView1.Columns[1].Width = com.Width;

            com.Location = newSystem.Drawing.Point(((this.dataGridView1.GetCellDisplayRectangle(1, index,true).Right) - (com.Width)), this.dataGridView1.GetCellDisplayRectangle(1, index,true).Y);

 

            Button btn1 = new Button();

            btn1.Name = "btnRun" + index.ToString(); ;

            btn1.Text = "Run";

            btn1.Click+=new EventHandler(btn1_Click);

 

            Button btn2 = new Button();

            btn2.Name = "btnRemove"+index.ToString();

            btn2.Text = "Remove";

            btn2.Click+=new EventHandler(btn2_Click);

 

            this.dataGridView1.Controls.Add(btn1);

            this.dataGridView1.Controls.Add(btn2);

            this.dataGridView1.Columns[3].Width = btn1.Width + btn2.Width + 6;

            btn1.Location = newSystem.Drawing.Point(((this.dataGridView1.GetCellDisplayRectangle(3, index,true).Left)), this.dataGridView1.GetCellDisplayRectangle(3, index, true).Y);

            btn2.Location = new System.Drawing.Point(((this.dataGridView1.GetCellDisplayRectangle(3, index,true).Right-1) - (btn2.Width)), this.dataGridView1.GetCellDisplayRectangle(3, index,true).Y);        

}

(3)为(2)中生成的Run按钮和Remove按钮添加单击事件处理程序

public void btn1_Click(object sender, EventArgs e)

{

            this.richTextBox1.Text = "";

            Button btn = (Button)(sender);

            //这个btn的name是btnRun打头的

            string suffix = btn.Name.ToString().Substring(6); //后边那个号,相当于index的string

            Control c = findControlByName(suffix);  

            if (c != null)

            {

                ComboBox com = (ComboBox)(c);

         //Control ctl1 = this.dataGridView1.Controls["Containers" + i.ToString()];

        //ComboBox com = (ComboBox)ctl1;  其实这样写更简单点

                for (int i = 0; i < com.Items.Count; i++)

                {

                    this.richTextBox1.Text += com.Items[i].ToString() + "\n";

                }

            }

}

 

public void btn2_Click(object sender, EventArgs e) 

{

 

      int RowCount = this.dataGridView1.Rows.Count;

      Button btn = (Button)(sender);

            //这个btn的name是btnRemove打头的

            string suffix = btn.Name.ToString().Substring(9);  //后边那个号,相当于index的string

            this.dataGridView1.Controls.RemoveByKey(btn.Name);

            this.dataGridView1.Controls.RemoveByKey("btnRun" + suffix);

            this.dataGridView1.Controls.RemoveByKey("Containers" + suffix);

            int index = Convert.ToInt32(suffix);

            this.dataGridView1.Rows.RemoveAt(index);

       if (index < RowCount - 2)

            {

                for (int i = index + 1; i < RowCount - 1; i++) 

                {

                    Control ctl1 = this.dataGridView1.Controls["Containers" + i.ToString()];

                    Control ctl2 = this.dataGridView1.Controls["btnRun" + i.ToString()];

                    Control ctl3 = this.dataGridView1.Controls["btnRemove" + i.ToString()];

                    ComboBox com = (ComboBox)ctl1;

                    Button btnRun = (Button)ctl2;

                    Button btnRemove = (Button)ctl3;

                    //上移一格,单元格Height位4,Button的Height为23

                    com.Location = new System.Drawing.Point(com.Location.X, com.Location.Y - 23);

                    btnRun.Location = new System.Drawing.Point(btnRun.Location.X, btnRun.Location.Y - 23);

                    btnRemove.Location = new System.Drawing.Point(btnRemove.Location.X, btnRemove.Location.Y - 23);

                    //改名字的后缀

                    int j=i-1;

                    com.Name = "Containers" + j.ToString();

                    btnRun.Name = "btnRun" + j.ToString();

                    btnRemove.Name = "btnRemove" + j.ToString();

                }

            }

}

(4)btn1_Click处理中用到的函数findControlByName()

public Control findControlByName(string suffix)

{

            foreach (System.Windows.Forms.Control c in this.dataGridView1.Controls)

            {

                if (c.Name == "Containers" + suffix)

                    return c;

            }

            return null;

}

写的比较累赘,不知道还有什么更好的方法。请经验人士赐教^_^     

转载于:https://www.cnblogs.com/timeover/archive/2010/09/15/1826900.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤来实现在 VB.NET 中使用 DataGridView 控件来查找数据库中符合输入条件的选项,并输出此: 1. 通过 Visual Studio 的“数据源”窗口连接到数据库,将数据添加到项目中。 2. 将 DataGridView 控件拖放到窗体上,并将其数据源设置为上一步添加数据表。 3. 添加一个文本框和一个按钮控件,用于输入查询条件和触发查询操作。 4. 在按钮的 Click 事件中,编写查询语句并执查询,将结果绑定DataGridView 控件中。 以下是代码示例: ```vb.net ' 声明一个 DataTable 用于存储查询结果 Dim dt As New DataTable() ' 获取查询条件 Dim keyword As String = txtKeyword.Text.Trim() ' 构造查询语句 Dim sql As String = "SELECT * FROM 表名 WHERE 字段名 LIKE '%" & keyword & "%'" ' 创建并打开数据库连接 Using conn As New SqlConnection("连接字符串") conn.Open() ' 创建一个 SqlDataAdapter,并使用查询语句和数据库连接初始化它 Dim adapter As New SqlDataAdapter(sql, conn) ' 将查询结果填充到 DataTable 中 adapter.Fill(dt) End Using ' 将查询结果绑定DataGridView 控件DataGridView1.DataSource = dt ``` 这段代码中,我们先声明一个 DataTable 用于存储查询结果,然后获取查询条件并构造查询语句。接着,我们创建一个 SqlDataAdapter,并使用查询语句和数据库连接初始化它。然后,我们调用 Fill 方法将查询结果填充到 DataTable 中。最后,将 DataTable 绑定DataGridView 控件的 DataSource 属性上,即可实现将查询结果显示在 DataGridView 控件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值