本帖最后由 zqd5920 于 2009-11-05 15:35:52 编辑

解决方案 »

  1.   

    列的显示与隐藏可以用Column.Visable属性实现,关键是那个下拉框,继承下DataGridView自己重写个吧。
      

  2.   

    不要沉下去了!高手们帮帮忙吧!
    那个下拉不会写啊!我看delphi7里有实现的
      

  3.   

    直接在左上角托个combobox好了,然后把背景什么颜色的给处理好,至于里面的checkbox的话估计这个combobox你要重写了
      

  4.   

     .net的IDE把大家害了~~~ 可怜的孩子们 
      

  5.   

    http://blog.csdn.net/21aspnet/archive/2007/03/25/1540301.aspx
    上面的网址有:
    GridView和下拉菜单DropDownList结合:
    GridView和CheckBox结合:
    有代码实例的,希望能帮助你!
      

  6.   

    那种控件要么自己做,要么用第三方。行的话,换个实现方式,比如在左上角单击弹出菜单,或者checklist
      

  7.   

    你所说的选择列标题,你可以用treeview来做,将你要显示的勾选,
    然后按1楼说的用Column.Visable来实现隐藏没有勾选的建议你自己做一个简单的demo来实现这个小功能,自己慢慢领悟datagridview的用法
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace WindowsApplication131
    {
        public partial class Form1 : Form
        {        [DllImport("user32.dll")]
            static extern int SendMessage(IntPtr hwnd, Int32 wMsg, Int32 wParam, Int32 lParam);        public Form1()
            {
                InitializeComponent();            DataGridView DGV = new DataGridView();
                DGV.Parent = this;
                DGV.Columns.Add("c1", "c1");
                DGV.Columns.Add("c2", "c2");
                DGV.Rows.Add(3);
                ComboBox CB = new ComboBox();
                CB.Name = "CB";
                CB.Parent = DGV;
                CB.Location = DGV.ClientRectangle.Location;
                DGV.BringToFront();            DGV.Invalidated += new InvalidateEventHandler(DGV_Invalidated);
            }        void DGV_Invalidated(object sender, InvalidateEventArgs e)
            {
                DataGridView DGV = (DataGridView)sender;
                ComboBox CB = (ComboBox)DGV.Controls.Find("CB", true)[0];            int CB_SETITEMHEIGHT = 0x153;            SendMessage(CB.Handle, CB_SETITEMHEIGHT, -1, DGV.ColumnHeadersHeight);
                CB.Width = DGV.RowHeadersWidth;
            }
        }
    }
      

  9.   

    CB.Location = DGV.ClientRectangle.Location;
                
    这句不要
      

  10.   

      DGV.BringToFront();
    一样不要
      

  11.   

    用column.visable来实现隐藏是个好办法!
    试试10楼说的那个吧!貌似我还有一丁点儿思路!突然间觉得我什么都不知道了 
      

  12.   

    不知道就对了,呵呵。。大彻大悟。。
    DatGridView的MouseDown方法里
    用DataGridView的HitTest方法,可以判断到是否点击到了左上角那个固定单元格。
    如果是的话,就在里面写你要的选择面板的实现方法吧。
      

  13.   

    12楼兄弟的代码倒是下拉列表整出来!非常兴奋!但是,如和把datagridview的列名整倒下拉列表里去有待尝试阿
      

  14.   

    不用那么复杂吧,设置个属性 <Settings ShowHeaderFilterButton="true" />不就得了,可以任意筛选
      

  15.   

    这是在winform里呢?在winform里不能使用这个语句吧
      

  16.   

    我按你的要求试了试实现方法:
    1)datagridview1的 RowHeadersVisible属性的值为Fasle,datagridview1 添加最前一列,列类型为datagridviewTextBoxColumn 
    2)添加一个Panle控件,控件里就放一个datagridview2 ,按1)datagridview2的 RowHeadersVisible属性的值为Fasle,datagridview2 添加最前一列,列类型为datagridviewCheckBoxColumn  ,添加一个按钮
    3)datagridview1的单击事件里判断当前行的列索引是不是你刚才添加的datagridviewTextBoxColumn
    如果是把Panle显示出来,datagridview2 的数据源绑定上
    4)在按钮的单击事件里定义一个临时表,用用循环得到datagridview2 中你选择的行,隐藏Panle,把datagridview1的数据源绑定到临时表。
    思路在这,自己学习.....没有压力就没动力!
      

  17.   

    这个我 实现过 。
    大致就是动态绑定combox。在你点击单元格的时候 ,让combox  漂浮到那个单元格的 上边,等你选了 之后 ,在把值附上去。另外,你可以选择用 DevExpress xtragrid ,这是个第三方的东西 ,好多功能都有,很方便的 。我一直用第三方的呢。
      

  18.   

    combox + objectdatasource+ gridview 轻松实现,,combox 属性autopost 设成 true(这个绑定数据我就不说了) ,objectdatasouce 数据源选择控件(combox的ID),OK了。gridview 的datasourceid 选成 objectdatasource 的ID
      

  19.   

    我推荐用右键菜单,做法比较简单,如果象楼主那样设计,对数据更新会产生影响,且很难实现:
    下面代码可以实现列的显示与隐藏(用菜单) 
            private void Form1_Load(object sender, EventArgs e)
            {
                // TODO: 这行代码将数据加载到表“userDbDataSet.Article”中。您可以根据需要移动或移除它。
                this.articleTableAdapter.Fill(this.userDbDataSet.Article);
                contextMenuStrip1.Items.Clear();
                for (int i = 0; i < dataGridView1.Columns.Count; i++)
                {
                    ToolStripMenuItem v = (ToolStripMenuItem)contextMenuStrip1.Items.Add(dataGridView1.Columns[i].HeaderText);
                    v.Tag = i;
                    v.Checked = true;
                    v.Click += toolStripMenuItem1_Click;
                }
                dataGridView1.ContextMenuStrip = contextMenuStrip1;
            }        private void toolStripMenuItem1_Click(object sender, EventArgs e)
            {
                ToolStripMenuItem m = (ToolStripMenuItem)sender;
                m.Checked = !m.Checked;
                dataGridView1.Columns[(int)m.Tag].Visible = m.Checked;  
            }
    http://www.mybuffet.cn