datagridview不要让我更改celll

时间:2017-02-02 13:43:16

标签: c#

我是c#的新手,但我可以做基础知识。我需要更改列的所有值,然后更新数据网格。值为20170202格式,我希望它们像2017-02-02。我做的方法工作正常但是当我尝试将值设置为列时它不会改变。

这是代码:

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); 
    }

1 个答案:

答案 0 :(得分: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);实际上是根据需要格式化日期。

你忽略了这样一个事实:尽管你以特定的方式看到网格中的数据,但实际上并没有改变数据本身。

<强>更新

要实际编辑单元格中的数据,请参阅here