【发布时间】:2016-08-24 08:59:51
【问题描述】:
我有一个多标签页。我的 PageControl 中的每个选项卡都包含一个带有一些按钮的 Dbgrid 来操作这个 dbgrid。
有时,当我单击删除按钮时,我的 DBGrid 不会改变。删除后,我在我的 DBgrid 中看到了我的值。
If MyTable.recordcount > 0 then
begin
str := 'Value of name field/**' + MyTable.FieldByName('Name').AsString+'**/';
If Application.MessageBox(PChar(str), PChar('NAME'), MB_OKCANCEL + MB_ICONQUESTION) = IDOK then
begin
MyTable.Delete;
end;
end;
我尝试添加
MyTable.Refresh;
删除后但它不起作用。 MessageBox中myfield的值是正确的!
当我在 MyDBgrid 中选择另一个 Tabsheet 时会出现此问题。 这可能是我的 DBGrid 中 focus 的问题吗?这可能是我的 DBGrid(dsBrowser, dsEdit,...) 的 state 的问题?
================================================ ==========
我尝试为 BeforeDelete 事件和 AfterDelete 事件创建日志:
Log(1,'------------------------------------Before Del');
Log(1,Format('DataSet.IsEmpty:%s',[BoolToStr1(DataSet.IsEmpty)]));
Log(1,Format('DataSet.State:%d',[Ord(DataSet.State)]));
Log(1,'--------');
Log(1,Format('DataSet.RecNo:%d',[DataSet.RecNo]));
Log(1,Format('DataSet.TabSheet:%s',[DataSet.FieldByName('TabSheetName').AsString]));
Log(1,Format('DataSet.FieldName:%s',[DataSet.FieldByName('FieldName').AsString]));
Log(1,Format('DataSet.FieldId:%s',[DataSet.FieldByName('FieldId').AsString]));
在 AfterDelete 事件中:
Log(1,'------------------------------------After Del');
Log(1,Format('DataSet.IsEmpty:%s',[BoolToStr1(DataSet.IsEmpty)]));
Log(1,Format('DataSet.State:%d',[Ord(DataSet.State)]));
Log(1,'--------');
Log(1,Format('DataSet.RecNo:%d',[DataSet.RecNo]));
Log(1,Format('DataSet.TabSheet:%s',[DataSet.FieldByName('TabSheetName').AsString]));
Log(1,Format('DataSet.FieldName:%s',[DataSet.FieldByName('FieldName').AsString]));
Log(1,Format('DataSet.FieldId:%s',[DataSet.FieldByName('FieldId').AsString]));
我将标签页用作:
我得到了这个日志
------------------------------------Before Del
DataSet.IsEmpty:False
DataSet.State:1
--------
DataSet.RecNo:7
DataSet.TabSheet:tabsheet_0
DataSet.FieldName:
DataSet.FieldId:03
------------------------------------After Del
DataSet.IsEmpty:False
DataSet.State:1
--------
DataSet.RecNo:6
DataSet.TabSheet:tabsheet_0
DataSet.FieldName:
DataSet.FieldId:03
您可以在我的日志中看到:删除包含03 的行后,数据集未更改(filedname 和 fieldId 未更改/RecNo 属性更改)。
【问题讨论】:
-
对不起,我真的不认为你的 q 充分描述了你的问题。 a)关于您的屏幕截图,当它显示的只是 DBGrid 的一部分时,您为什么要谈论标签表? b) 为什么选择行中 DBGrid 中的 LH 数据列是空白的? c)您显示的日志:这是RecNo 6被成功删除的情况吗?如果是这样,我看不出向我们展示这一点的意义 - 最好是记录没有被删除时的日志。 d) 数据集是用来记录 DBGrid 嵌入形式的属性还是什么? Iow,您的 q 并不清楚您在做什么。
-
顺便说一句,我认为如果你需要这方面的帮助,你将不得不在你的 q 中包含一个 MCVE - 请参阅stackoverflow.com/help/mcve
-
@MartynA 谢谢你的帮助......我尽量说清楚.. A> 我谈论标签表是因为当我更改当前标签表并直接去删除一行时,我可以重现错误选择的新标签页..在这种情况下,删除不正确... B>这个单元格是空的..我没有在这个单元格中放任何东西..C>你可以看到一个RecNo = 6但是fieldname 和 fieldId 没有改变,我的 DBgrid 界面也没有改变... D> MyDbgrid 在我创建新标签页时添加((当我添加新标签页时,我实例化了一个包含 DBGrid 的类,所有按钮))
标签: database delphi dbgrid paradox