2016-10-14 17 views
1

SQLテーブルの単一の行の特定の列にテキストボックスの値を挿入するLINQは大したことではありませんが、たとえば、5つのテキストボックスがある場合、SQLテーブルに5つの新しい行を作成する必要があります。以下は私が単一行の異なる列にテキストボックスを挿入する方法である:複数のテキストボックスをLINQを使用して別の行にSQLテーブルに挿入

Table Name: tblModulRelayConfig 

index fltCe fltUT1 fltUT2 fltUT3 fltUT4 fltUT5 fltUT6 

1  75  Text1 Text2 Text3 Text4 Text5 Text6 
2  76  Text1 Text2 Text3 Text4 Text5 Text6 


     using (myDataContext mydc= new myDataContext()) 
      { 
      tblModulRelayConfig tblModuler = (from CE in mydc.tblCEs 
              where CE.fltCE == 75 
              select CE).FirstOrDefault(); 
      if(tblModuler != null)//in order to update table 
      { 
        nyModul.fltUT1 = TextBox1.Text; 
        nyModul.fltUT2 = TextBox2.Text; 
        nyModul.fltUT3 = TextBox3.Text; 
        nyModul.fltUT4 = TextBox4.Text; 
        nyModul.fltUT5 = TextBox5.Text; 
        nyModul.fltUT6 = TextBox6.Text; 
      } 
      else // if it does no exist already 
      { 
        tblModulRelayConfig nyModul = new tblModulRelayConfig(); 
        nyModul.fltUT1 = TextBox1.Text; 
        nyModul.fltUT2 = TextBox2.Text; 
        nyModul.fltUT3 = TextBox3.Text; 
        nyModul.fltUT4 = TextBox4.Text; 
        nyModul.fltUT5 = TextBox5.Text; 
        nyModul.fltUT6 = TextBox6.Text; 

        mydc.tblModulRelayConfigs.InsertOnSubmit(nyModul); 

        mydc.SubmitChanges(); 
      } 
     } 

しかし、どのように従うように、テーブルを作成するには、私が代わりに単一行のテキストボクセ値を挿入する、私はそれぞれのデータを挿入する意味シングルボタンのクリックで新しい行のテキスト・ボクセ:

tblModulRelayConfig 

index fltCe fltUTNr fltUT 

1  75  1  Text1 
2  75  2  Text2 
3  75  3  Text3 
4  75  4  Text4 
5  75  5  Text5 
6  75  6  Text6 

私は、次のコードを試みたが、ループの中断せずにそれが唯一のテーブルに最後textboxeデータを追加し、ブレークして、それが唯一の最初のtextboxe値を追加します。私が使用しよう のコードは、リンクの下からです: Show Linq-to-SQL table rows in separate text boxes

var textbox = GetAll(this, typeof(TextBox)); 
       tblModulRelayConfig nyKanal = new tblModulRelayConfig(); 
       foreach (Control c in textbox) 
       { 
        textNr++; 
        if (c is TextBox) 
        { 
         var tx = ((TextBox)c); 
         nyKanal.fltUTNr = textNr; 
         nyKanal.fltUT=tx.Text; 
         sls.tblModulRelayConfig .InsertOnSubmit(nyKanal); 
         sls.SubmitChanges(); 
         break; 
        } 
       } 

答えて

0

あなたはこのソリューションを試してください。私はfltUTNrをテキストボックスの名前を含むfltUTNameに置き換えました。このようにして、あなたはあなたとのより強い拘束力を持っています:

index fltCe fltUTName fltUT 

1  75  TexBox1 Text1 
2  75  TexBox2 Text2 
3  75  TexBox3 Text3 
4  75  TexBox4 Text4 
5  75  TexBox5 Text5 
6  75  TexBox6 Text6 


int fltCE_item = 75; 

using (myDataContext mydc= new myDataContext()){ 

    List<tblModulRelayConfig> tblModuler = (
      from CE in mydc.tblCEs 
      where CE.fltCE == fltCE_item 
      select CE 
    ); 

    foreach(TextBox tx in GetAll(this, typeof(TextBox)){ 

     if(tblModuler.Count > 0){ //update table 
     foreach(var CE in tblModuler) 
      if(CE.fltUTName.Equals(tx.Name)) 
       CE.fltUT = tx.Text; 

     }else{ //insert: index should be autoseeded into the db; 

     tblModulRelayConfig nyModul = new tblModulRelayConfig(); 
     nyModul.fltCe = fltCE_item; 
     nyModul.fltUTName = tx.Name; 
     nyModul.fltUT = tx.Text; 

     mydc.tblModulRelayConfigs.InsertOnSubmit(nyModul); 
     } 
    } 
    mydc.SubmitChanges(); 
} 
関連する問題