怎样实现在DBGrid中双击选择整行,并且可以多选?谢谢!!

DBGrid1->Options里有个dgMultiSelect,把它设为true就能多选了

先设置DBGrid1->options中dgRowSelect = true, dgMultiSelect = true。
接着写按下面的写。
void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
  keybd_event(VK_CONTROL,0,0,0);   //模拟按下CTRL键
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(Button==mbRight) //右键取消多选;
  {
    keybd_event(VK_CONTROL,0,2,0);  //模拟放开CTRL键
  }
}

可以实现,不过尚不完美。
在cell点击时选择编辑,在dblclick时为整行选定。代码如下:

void __fastcall TForm1::DBGrid1DblClick(TObject *Sender)
{
        TDBGridOptions options = DBGrid1->Options ;
        DBGrid1->Options = options << dgRowSelect;

}

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
        TDBGridOptions options = DBGrid1->Options ;
        DBGrid1->Options = options >> dgRowSelect;
        DBGrid1->Options = options << dgEditing;
}

这样在每行双击时为整行选取,之后点击每行的非dgTitle部分均为每行选取,点击cell时为可编辑,单格选取。

procedure TForm1.FormDblClick(Sender: TObject);
begin
  ShowMessage(‘双击‘);
end;

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  {
  DBGrid1.DataSource.DataSet.DisableControls;
  DBGrid1.DataSource.DataSet.First;
  DBGrid1.SelectedRows.CurrentRowSelected := True;
  DBGrid1.DataSource.DataSet.EnableControls;
  }
  keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
  keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放开Ctrl键
   //keybd_event(VK_CONTROL,0,0,0);   //模拟按下CTRL键
    // ShowMessage(‘双击‘);
  //DBGrid1.DataSource.DataSet.GetBookmark()
  //DBGrid1.Options dgmultiselect
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    DisableControls;
    First;
    while not Eof do
    begin
      DBGrid1.SelectedRows.CurrentRowSelected := True;
      Next;
    end;
    EnableControls;
  end;
end;
时间: 2024-08-29 09:04:01

怎样实现在DBGrid中双击选择整行,并且可以多选?谢谢!!的相关文章

在DBGrid中,单击单元格选择整行,双击又可编辑单元格

在设计过程中,有时候数据较大量,field 较多的时候,只是点击单元格可能会对某个field的数据误操作(如数据错行),为此才会想到这个问题,解决办法如下:点击单元格就改当前行颜色. 首先DBGRID的属性做好下设置(其实也是DBGRID默认的属性) DBGrid1->Options->dgEditing=TrueDBGrid1->Options->dgRowSelect=False 一.先在implementation前做如下定义type  TMyDBGrid=class(TDB

asp.net中Repeart选中整行操作

1 <asp:Repeater runat="server" ID="rpt_Student"> 2 <HeaderTemplate> 3 <table> 4 <tr id="tr_<%#this.rpt_Student.Items.Count%>" onclick='Tr_Click(tr_<%#this.rpt_Student.Item.Count%>)'> 5 <

在dbgrideh中允许选择多行,如何知道哪些行被选中

是个BOOKMARK类型的属性. SelectedRows: TBookmarkListprocedure TForm1.Button1Click(Sender: TObject);vari, j: Integer;s: string;beginif DBGrid1.SelectedRows.Count>0 then with DBGrid1.DataSource.DataSet do for i:=0 to DBGrid1.SelectedRows.Count-1 do begin GotoB

Android下通过root实现对system_server中binder的ioctl调用拦截

Android下通过root实现对system_server中binder的ioctl调用拦截 分类: Android2013-06-19 18:09 779人阅读 评论(0) 收藏 举报 作 者: Passion时 间: 2012-10-18,13:53:53链 接: http://bbs.pediy.com/showthread.php?t=157419 Android下通过root实现对system_server中binder的ioctl调用拦截作者:passion2012-10-18关键

c#如何实现在datagridview中加入时间控件

由于时间原因,再加之自己懒惰!好久没写博客了,今天写一篇关于datagridview中如何实现时间控件的文章,算是继续自己的记录的习惯! 首先,我们知道datagridview中并不提供控件,因此,我们无法直接使用!对此我们可以进行如下操作,从而实现在datagridview中插入时间控件. 一.声明控件 我们首先要做的便是声明一个时间控件,这个不必详细多说了,有两种方式: 1.直接在工具栏中进行拖拽 2.在窗体的designer.cs文件中进行声明. 无论哪种方式,都可以,代码如下: priv

如何实时获取DBGrid 中当前单元格输入的内容?

如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理, 用什么事件呢? 所以Field的Onchange事件是没用的. 这个问题简单啊,每输入1个数据的后就提交(并不是提交到数据库,还是在编辑状态),那么用DataSet就可以取值了 用DBGrid的KeyUp事件: procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;   Shift: TShiftState); beg

(很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]

如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.SelectedField.AsStringDBGrid1.SelectedField.Text看你需要选择 这个问题简单啊,每输入1个数据的后就提交(并不是提交到数据库,还是在编辑状态),那么用DataSet就可以取值了用DBGrid的KeyUp事件: procedure TForm1.DBGrid1Key

php array_rand()函数从数组中随机选择一个或多个元素

php使用array_rand()函数从数组中随机选择一个或多个元素的方法. 使用array_rand() 函数从数组中随机选出一个或多个元素,并返回. array_rand(array,number) 参数 描述 array 必需.规定输入的数组参数. www.jbxue.com number 可选.默认是 1.规定返回多少个随机的元素. 例子: <?php $a=array("a"=>"Dog","b"=>"Cat

老男孩教育每日一题:2017年3月9日-请解释下面Shell脚本中if开头的整行代码的意思及应用场景吗?

请解释下面Shell脚本中 if开头的整行代码的意思,你见过它的应用场景么? if(kill -0 $pid 2>/dev/du11) then     echo"oldboy" else    echo"oldgirl" fi 面试题:请解释if (kill -0 $pid 2>/dev/null)代码的意思? if(kill -0 $pid 2>/dev/null)     then        echo "oldboy"