我的表单上有一个文本框和一个网格。
功能:当我在文本框中输入与该员工 ID 相对应的员工 ID(例如 1、2、3 等)时,员工名称应该出现在数据库中的网格中。当我再次输入另一个 Emp ID 时,另一个 Emp 名称应该嵌入到下一行的网格中,依此类推......只要我愿意,就可以多次,但不行。 emp 名称应继续以这种方式出现在网格的下一行。
我想我已经尽力解释了我的问题。
我的方法
我为此使用 TTable、TDatasource 和 TDBGrid。当我在文本框中输入任何 Emp ID 并按 Enter 时,我会检查数据库中的 Emp Name,然后将该名称附加到 TTable。然后我将此 TTable 分配给 TDatasource,最后将 TDatasource 分配给 TDBGrid。以下是此操作的代码
Table1.Close;
//Create table for the first time
if not Table1.Exists then
begin
Table1.Close;
Table1.DatabaseName := 'databaseName';
Table1.TableType := ttParadox;
Table1.TableName := 'MyTable';
Table1.FieldDefs.Clear;
Table1.FieldDefs.Add('EmpName',ftString,40);
Table1.CreateTable;
Table1.Open;
end;
Table1.Open;
Table1.Append;
Table1.FieldByName('EmpName').AsString := EmpName; //EmpName is fetched from database
Table1.Post;
//Now assign this table to datasource
DataSource1.DataSet := Table1;
//Now assign this datasource to dbgrid
DBGrid1.DataSource := DataSource1;
我的问题:我的问题是,网格中显示的记录行为异常。记录不按正确的顺序显示,而是相互混合。意味着网格中的数据行不按我用来附加的顺序显示。可能是什么问题呢。我是否要在每次绑定或其他操作之前刷新一些数据源或 dbgrid?请帮忙。
要定义记录的顺序,您必须使用索引/主键。
像下面的代码一样添加它。
Table1.FieldDefs.Add('EmpId', ftAutoInc, 0, True);
Table1.FieldDefs.Add('EmpName', ftString, 40);
Table1.IndexDefs.Add('idxEmpId','EmpId',[ixPrimary]);
Table1.CreateTable;
Table1.Open;
您可以通过定义 DBGrid.Columns 属性来隐藏 EmpId,使其无法在网格中查看,其中仅显示必要的列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)