2017-01-04 4 views
1

Iam имеет строку Grid, поля в первой строке относятся к CSV, а во второй строке - имена столбцов из таблицы в базе данных.Delphi сохраняет данные в StringGrid для Json-файла

Теперь после того, как нажать на кнопку Сохранить БТН он должен создать мне JSon файл, как показано ниже

{ 
"GHARGA": "GHARGA", 
"SELLINGPRICE1": "SELLPRICE1", 
"SELLPRICE2": "SELLPRICE2", 
"SELLPRICE3": "SELLPRICE3", 
"PCODE": "PCODE" 
} 

Я попытался это так:

procedure TfrmMapping.btnsaveClick(Sender: TObject); 
var 
    Dat1: TStringList; 
    i: Integer; 
    lJsonObj: TJSONObject; 
begin 
    lJsonObj := TJSONObject.Create; 

    Dat1 := TStringList.Create; 

    if btnsave.Caption = 'Save' then 
    begin 
    for i := 0 to StrGrdCsv.RowCount - 1 do 
    begin 
    Dat1.AddStrings(StrGrdCsv.Rows[i]); 
    end; 

    for i := Dat1.Count - 1 Downto StrGrdCsv.ColCount do 
    begin 
     lJsonObj.AddPair(TJSONPair.Create(TJSONString.Create(Dat1.Strings[i]), 
     TJSONString.Create(Dat1.Strings[i]))); 
    end; 

    TFile.WriteAllText(cmbBXDBTables.Text + '.json', lJsonObj.ToString); 
    btnsave.Caption := 'Load Data'; 
     end; 
     end; 

но это создает как

{ 
    "GHARGA": "GHARGA", 
    "SELLPRICE1": "SELLPRICE1", 
    "SELLPRICE2": "SELLPRICE2", 
    "SELLPRICE3": "SELLPRICE3", 
    "PCODE": "PCODE" 
    } 
+0

Вы прочитали код? Посмотрите, что вы переходите в AddPair. В любом случае вам не нужен список строк temp. Это вас просто сбивает с толку. Прочтите данные непосредственно из сетки строк. –

+0

@DavidHeffernan, я зачитал код, вы говорите, чтобы изменить оператор как 'lJsonObj.AddPair (TJSONPair.Create (TJSONString.Create (StrGrdCsv.Rows [1] .ToString), TJSONString.Create (StrGrdCsv.Rows [2] .ToString))); ' – userhi

+2

Вы, кажется, зациклились на свойстве Rows. Вы можете читать отдельные ячейки. И индексирование основано на нуле. –

ответ

2

Модифицированный код согласно предложениям @DavidHeffemann и @RemyLeebeau

procedure TfrmMapping.btnsaveClick(Sender: TObject); 
var 
    i: Integer; 
    lJsonObj: TJSONObject; 
begin 
    lJsonObj := TJSONObject.Create; 

    if btnsave.Caption = 'Save' then 
    begin 
    for i := 0 to StrGrdCsv.ColCount do 
    begin 
     lJsonObj.AddPair(StrGrdCsv.Cells[i, 0], StrGrdCsv.Cells[i, 1]); 
    end; 
    TFile.WriteAllText(cmbBXDBTables.Text + '.json', lJsonObj.ToString); 
    btnsave.Caption := 'Load Data'; 
    end; 
end; 

Изменен цикл For и заставил его работать, используя ячейки строковой сетки.

Благодарим вас, @DavidHeffemann и @RemyLeebeau за ваши предложения.

Смежные вопросы