我要在DataGridView一列中鼠标点击这一列的个单元格后这个单元格里出面一个按钮。点击后弹出一个窗体,选择后这一行就被填充了你选择的值,然后 
这一个按钮消失。还有一个问题,就是键盘的向下键。光标停到DataGridView的最后一行按个向下键后就自动生成一空白行。

解决方案 »

  1.   

    1.模版列:试试那列用DataGridViewButtonColumn。
    2.好像是把AlowUserToAddRows属性设置成flase。
      

  2.   

    有两种做法:
    1:当选中一个单元格的时候动态的建立一个Button,把这个Button显示到当前的单元格中,给这个Button添加一个事件弹出窗体供操作.2:给DataGridView的每一个列都使用自定义的列.第一种做法较简单,你可以试试如下做法:
    private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
    this.dataGridView1.Controls.Clear();
    Button btn = new Button();
    btn.Bounds = this.dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
    btn.Visible = true;
    btn.Text = this.dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
    btn.Click += new EventHandler(btn_Click);
    this.dataGridView1.Controls.Add(btn);
    }void btn_Click(object sender, EventArgs e)
    {
    Form f = new Form();
    f.ShowDialog(this.dataGridView1);
    }
      

  3.   

    如下的设置可以使DataGridView自动的在最后一行增加一个输入行:
    this.dataGridView1.AllowUserToAddRows=true
      

  4.   

    btn.Text = this.dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
    这个怎么提示未将对象引用设置到对象的实例.呀,谢谢!
      

  5.   

    1、创建一Button控件设为隐藏,在DataGridView的CellClick事件里设置Button可见,位置为当前cell位置,在Button的click事件设置弹出窗体,弹出窗体上选的值返回到当前cell
    2、选中DataGridView,点右上角的三角,取消“启动添加”的选项
      

  6.   

    btn.Text = this.dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
    只是给按钮设置一个标题,你可以不用这句.而使用一个固定的标题,比如:btn.Text = "操作";
      

  7.   

    是这样的我只有一列才出现按钮,而且按钮只是右对其这个单元格,不是占满这个单元格
    还有就是你那个this.dataGridView1.AllowUserToAddRows=true方法,键盘向下的按键不能实现
    自动生成一行呀,要可以连续可以生成的.谢谢了
      

  8.   

    是这样的我只有一列才出现按钮
    --------------------------------------
    DataGridView不是有一个按钮的列吗?如果不合适,你可以通过自定义来定义一个自已的列添加到DataGridView中.要可以连续可以生成的
    ------------------------------
    你可以动态的向数据源里添加新行来实现,可以使用:
    DataTable.NewRow 方法生成新行,然后向DataTable.Rows添加,或
    DataView.AddNew 方法向DataTable中添加新的行.
      

  9.   

    不是占满整个单元格,这个好说,你只要由GetCellDisplayRectangle来计算就可以了.我不是说了吗?你可以自定义一个编辑列.参照MSDN:
    如何:在 Windows 窗体 DataGridView 单元格中承载控件 DataGridView 控件提供了多种列类型,使得用户可以通过多种方式输入和编辑值。但是,如果这些列类型无法满足数据输入要求,您也可以使用承载所选控件的单元格创建自己的列类型。要做到这一点,必须定义派生自 DataGridViewColumn 和 DataGridViewCell 的类。您还必须定义派生自 Control 并实现 IDataGridViewEditingControl 接口的类。下面的代码示例演示如何创建日历列。此列的单元格在普通的文本框单元格中显示日期,但当用户编辑单元格时,就会出现 DateTimePicker 控件。为了避免必须再次实现文本框显示功能,CalendarCell 类从 DataGridViewTextBoxCell 类派生,而不是直接从 DataGridViewCell 类继承。注意 
    当从 DataGridViewCell 或 DataGridViewColumn 派生并向派生类添加新属性时,请确保重写 Clone 方法以便在克隆操作期间复制新属性。还应调用基类的 Clone 方法,以便将基类的属性复制到新的单元格或列中。
     
    ....
      

  10.   

    重写datagridvew,添加模板,然用这个事件EditingControlShowing