2017-01-26 6 views
1

У меня есть grid, который заполнен из datatable.Проникните через данные, получите значение и заголовок

Grid

То, что я пытаюсь достичь Переберите каждый rowcolumn & Это выбран и хранить набор значений для переменных, так что я могу обновить таблицу.

Так, например, цикл должен начинаться с P1, хранить значение 431 /, P1 и 88,2 трех переменных:

string sub = '431/' 
string code = 'P1' 
decimal newbaseprice = 88.2 

Выполните обновление:

UPDATE MyPriceTable 
SET BasePrice = newbaseprice 
WHERE PartNum = sub and ListCode=code 

И поэтому до тех пор, пока не будут обновлены P2 & P3.

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

foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true")) 
     { 
      string sub = row["SUB"].ToString(); 
      string p1 = row["P1"].ToString(); 
      string p2 = row["P2"].ToString(); 
      string p3 = row["P3"].ToString(); 
} 

У кого-то есть другой подход к решению этой проблемы?

ответ

3

Проблема в том, что вы DataBound на Grid и задаетесь вопросом, как обновлять данные за сеткой, а затем обновлять сетку.

Ваша первая проблема заключается в том, что более одного выбора приведет к перезаписи в вашем цикле. Это сделает все значения эквивалентными самой последней итерации, что не помогает. Я рекомендую сделать частный вложенный класс, чтобы справиться с этим.

private class DItem 
{ 
    public string sub {get;set;} 
    public string p1 {get;set;} 
    public string p2 {get;set;} 
    public string p3 {get;set;} 
} 

И затем использовать его таким образом:

var litms = new List<DItem>() 
foreach(DataRow row in ((DataTable)this.grdPart.DataSource).Select("Seleccionar= true")) 
     { 
      var item = new DItem(); 
      item.sub = row["SUB"].ToString(); 
      item.p1 = row["P1"].ToString(); 
      item.p2 = row["P2"].ToString(); 
      item.p3 = row["P3"].ToString(); 
      litms.Add(item); 
     } 

Тогда вы можете просто позвонить список вашего класса с помощью Linq и присвоить значения таким образом, или (правильный путь) обновить DataTable со значениями и повторной привязкой. Вы можете использовать имена столбцов или их индексы, чтобы сделать имена неактуальными.

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

  • Нет связанных вопросов^_^