删除dbgrid中的所有非数字行

时间:2011-07-08 13:32:29

标签: delphi

我想删除dbgrid中的所有非数字行

例如我的dbgrid行是:

row1= 127.0.0.1:900
row2= 103.43.122.40:8000
row3= 122.12.75.4:3128
row4= netfire.se98.ar:3000
row5= po-ryd.449.br:3128
row6= 93.5.32.150:6540

现在,删除dbgrid中的所有非数字行。

1 个答案:

答案 0 :(得分:6)

DbGridTDataSet后代支持。 TDataSet后代具有Filtered属性和OnFilterRecord可用于过滤记录。

以下是一个示例OnFilterRecord实施,拒绝任何由不是数字而非'.'':'的字符组成的记录。请注意我没有使用char-in-set测试,因此代码与Unicode Delphi和非Unicode Delphi完全兼容。

procedure TForm1.ClientDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var Value: string;
    i: Integer;
    C: Char;
begin
  Value := DataSet['IP']; // Replace "IP" with your field's name
  for i:=1 to Length(Value) do
  begin
    C := Value[i];
    if not(C in ['.', ':', '0'..'9']) then // Detect bad characters
    begin
      Accept := False; // This record will NOT be shown.
      Exit;
    end;
  end;
  Accept := True; // No bad characters were found, show the record.
end;

分配此OnFilterRecord处理程序后,请不要忘记设置Filtered := True