none
Cambiar Valor de una columna de un DataTable RRS feed

  • Pregunta

  • buen dia

    tengo la siguiente informacion en un datatable


    LO QUE Deseo cambiar es cambiar toda la columna con DES por TRA

    para esto hago la siguiente rutina...

                DataRow drDoc = dtImport.Rows.Find("Documento");
                if (drDoc != null)
                {
                    drDoc["Documento"] = "TRA";
                }

    Pero me sale en la linea DataRow drDoc = dtImport.Rows.Find("Documento"); <-- Error La tabla no tiene una clave principal.

    Quien me puede decir por que pasa ese error??



    • Editado greg_dorian martes, 12 de julio de 2016 16:09
    martes, 12 de julio de 2016 16:07

Respuestas

  • greg_dorian,

    El método Find obtiene una fila en base al valor del identificador,  si buscas resultados por el valor de otra columna puedes hacer lo siguiente:

    foreach(DataRow row in dtImports.Rows)
        {
            if (row["Documento"] == "DES")
            {
                    row["Documento"] = "TRA";
            }        
        }

    • Marcado como respuesta greg_dorian martes, 12 de julio de 2016 16:46
    martes, 12 de julio de 2016 16:27

Todas las respuestas

  • greg_dorian,

    El método Find obtiene una fila en base al valor del identificador,  si buscas resultados por el valor de otra columna puedes hacer lo siguiente:

    foreach(DataRow row in dtImports.Rows)
        {
            if (row["Documento"] == "DES")
            {
                    row["Documento"] = "TRA";
            }        
        }

    • Marcado como respuesta greg_dorian martes, 12 de julio de 2016 16:46
    martes, 12 de julio de 2016 16:27
  • Hola,

    Puedes hacerlo en una línea usando Linq.

    using System.Linq;

    Y :

    //Cambia toda la columna Documento por TRA
    dtImport.Rows.Cast<DataRow>().ToList().ForEach(x => x.SetField("Documento", "TRA"));
    
    //Cambia solo los que tienen DES por TRA
    dtImport.Rows.Cast<DataRow>().Where(x=> Convert.ToString(x["Documento"]) == "DES" ).ToList().ForEach(x => x.SetField("Documento", "TRA"));

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 12 de julio de 2016 16:35
  • greg_dorian,

    El método Find obtiene una fila en base al valor del identificador,  si buscas resultados por el valor de otra columna puedes hacer lo siguiente:

    foreach(DataRow row in dtImports.Rows)
        {
            if (row["Documento"] == "DES")
            {
                    row["Documento"] = "TRA";
            }        
        }

    hola william, pero que valor de identificador se obtiene segun lo que dice microsoft puedo buscar lo que desee en el Datatable, pero es valido lo que me dices, no queria recorrer el datatable por todo, deberia existir un un UPDATE column en un datatable jjejjeje
    martes, 12 de julio de 2016 16:46