2013-04-15 2 views
-3

Я только начинаю с Linq до sql. Я борюсь с передачей управляющих переменных в инструкцию delete. Может ли кто-нибудь взглянуть на это и указать мне в правильном направлении?Как использовать .FindControl в запросе Linq?

protected void Delete_Click(object sender, EventArgs e) 
{ 
    NorthwindDataContext db = new NorthwindDataContext(); 


    foreach (GridViewRow row in GridView1.Rows) 
    { 
     if (((CheckBox)row.FindControl("CheckBox1")).Checked) 
     { 
      string prod_id = row.FindControl("lbl_id").ToString(); 

      Product product = (from p in db.Products 
            where p.ProductID == int.Parse(prod_id) // <-- I get conversion errors here!! 
            select p).Single(); 

      db.Products.DeleteOnSubmit(product); 

      db.SubmitChanges(); 


     } 
    } 

    ShowProducts();   
} 
+0

Какая ошибка преобразования? –

+4

Это не имеет ничего общего с Линком, это всего лишь отвлечение. Упростите проблему до FindControl, ToString и int.Parse. –

+0

Возможно, вы можете подробно описать, что вы пытаетесь сделать с FindControl в своем контексте? –

ответ

4

ваша проблема есть:

string prod_id = row.FindControl("lbl_id").ToString(); 

вызова метода ToString() на элементе управления возвращает имя типа управления, а не контрольного значения. Вы должны использовать этот элемент управления независимо от его типа, а затем получить значение в нем. Давайте предположим, что это текстовое поле:

string prod_id = ((TextBox)row.FindControl("lbl_id")).Text; 
+0

Как шарм !! Я знал, что я рядом! Потрясающие!! Спасибо!! – briskovich

0

Эта линия -

string prod_id = row.FindControl("lbl_id").ToString(); 

возвращает тип объекта управления в виде строки. Вы должны, вероятно, отливать возвращение Control к типу управления вы хотите, например .:

string prod_id = ((TextBox)row.FindControl("lbl_id")).Text; 

Как и другие заявили, что проблема не с Linq, но ваш лечения методом FindControl.

Таким образом, вы можете в дальнейшем понять, что произошло - предположим, мы используем управление TextBox как описано выше ...

Product product = (from p in db.Products 
         where p.ProductID == int.Parse(prod_id) // <-- I get conversion errors here!! 
         select p).Single(); 

С текущего использования, FindControl("lbl_id").ToString() возвращает

«System.Windows.Forms. TextBox "

Очевидно, что это не удастся с int.Parse(prod_id).

Изменив код, чтобы правильно применить элемент управления к ожидаемому TextBox, затем извлеките свойство Text - например. «1», теперь вы можете проанализировать строку «1» на правильное целочисленное значение.

Это вызывает необходимость подтверждения вашего ввода. По крайней мере, вы должны реализовать int.TryParse, так как вы можете быть в зависимости от ввода пользователя в текстовое поле.

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