我在表单上有一个文本框和一个网格。
功能:当我在文本框中输入Emp ID(比如1,2,3等)时,对应于该Emp ID,Emp Name应该从数据库进入Grid。当我再次输入另一个Emp ID时,另一个Emp Name应该嵌入到下一行的网格中,依此类推......我想要多次,不然。通过这种方式,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。请帮助。
答案 0 :(得分:0)
要定义记录的顺序,必须使用索引/主键。 像下面的代码一样添加它。
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,使其无法在网格中查看,其中只显示必要的列。