2017-02-02 15 views
1

私はC#で新しいですが、私は基本を行うことができます。私は列のすべての値を変更し、DataGridを更新する必要があります。値は20170202形式であり、2017-02-02のようにしたいと思います。方法は私はうまく動作したが、私はそれが変更されません列に値を設定しようとするとき。私の悪い英語のため申し訳ありませんdatagridview私はcelllの値を変更しません

private void fixAlldates(DataGridView dataGridView2) 
    { 
     string aux1 = ""; 

     for (int x = 0; x < dataGridView2.Rows.Count; x++) 
     { 

      if (dataGridView2.Rows[x].Cells[4].Value.ToString() != null) 
      { 
       aux1 = dataGridView2.Rows[x].Cells[4].Value.ToString(); 
       dataGridView2.Rows[x].Cells[4].Value = fixDate(aux1); 
      } 

      if (dataGridView2.Rows[x].Cells[5].Value.ToString() != null) 
      { 
       dataGridView2.Rows[x].Cells[5].Value = fixDate(dataGridView2.Rows[x].Cells[5].Value.ToString()); 
      } 


      dataGridView2.Refresh(); 
       MessageBox.Show(fixDate(aux1); ----> shows result like i want ex: 2017-02-02 
      MessageBox.Show(dataGridView2.Rows[x].Cells[4].Value.ToString()); ----> shows 2070202 
     }  
    } 


    private string fixDate(string p) 
    { 

     if (p == null) return "No especificado"; 
      String fecha = "" + p.Substring(0, 4) + "-" + p.Substring(4, 2) + "-" + p.Substring(6, 2) + ""; 
      return fecha; 


    } 

、少しさび

編集イム::私はのBindingSourceでデータを埋める

をここ

コードがあります。

private void LlenarProductos(string rut) 
    { 

     this.rut = rut; 
     POLbindingSource1.DataSource = null; 
     dataGridView2.DataSource = null; 
     DataClasses1DataContext dc = new DataClasses1DataContext(); 
     dc.CommandTimeout = 0; 
     System.Data.Linq.Table<ASE_PRODUCTOASEGURADO> producto = dc.GetTable<ASE_PRODUCTOASEGURADO>(); 
     var todoprod = from p in producto 
         where p.RUT == int.Parse(rut) 
         select new 
         { 
          p.POLIZA, 
          p.SOCIO, 
          p.SUCURSAL, 
          p.COD_PROPUESTA, 
          p.FECHA_ALTA_COTI, 
          p.FECHA_ALTA_VCTO, 
          p.NOMBRE_PRODUCTO 
         }; 

     POLbindingSource1.DataSource = todoprod; // binding source 
     dataGridView2.DataSource = POLbindingSource1; // filll 
     this.dataGridView2.Columns["POLIZA"].HeaderText = "Poliza"; 
     this.dataGridView2.Columns["Socio"].HeaderText = "Socio"; 
     this.dataGridView2.Columns["Sucursal"].HeaderText = "Sucursal"; 
     this.dataGridView2.Columns["COD_PROPUESTA"].HeaderText = "Propuesta"; 
     this.dataGridView2.Columns["FECHA_ALTA_COTI"].HeaderText = "Fecha Cotizacion"; 
     this.dataGridView2.Columns["FECHA_ALTA_VCTO"].HeaderText = "Fecha Vencimiento"; 
     this.dataGridView2.Columns["NOMBRE_PRODUCTO"].HeaderText = "Producto"; 
     // fixAlldates(dataGridView2); 
    } 
+0

参照実際のセル内のデータを編集するには?ブレークポイントを使ってトレースしたことがありますか? – Valkyrie

+0

コードは正常に実行されますか?また、データグリッドビューがどのようにデータで満たされているかを示すことができますか? – jambonick

+2

フィールドに '20170202'のような文字列の代わりに実際のDateTimeオブジェクトが含まれるように* data *を修正する方がよいでしょう。グリッド列に正しい書式文字列を指定するだけでよいでしょう。どのようにデータをロードしますか?グリッドにどのようにバインドしていますか? –

答えて

0

からmsdn https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.value(v=vs.110).aspx

Valueプロパティは、セルに含まれる実際のデータオブジェクトです。

だから基本的にラインMessageBox.Show(dataGridView2.Rows[x].Cells[4].Value.ToString());はあなたが必要とするMessageBox.Show(fixDate(aux1);のに対し、実際の日付をフォーマットされ、基礎となるデータの値を取得しています。

グリッド内のデータが特定の方法で表示されていても、実際にはデータ自体は変更されていないということを見落としています。

UPDATE

エラーが出たんhere

+0

次に、基礎となるデータの値を設定するにはどうすればよいですか? –

+0

@JoaquinMuñozBarceló更新された回答を参照してください。 –

+0

@JoaquinMuñozBarcelóおそらくデータを変更する必要はありません。データの種類は何ですか?それはDateTimeですか?文字列?数? –

関連する問題