2016-01-07 4 views
0

меня такая ситуация:Read/редактировать значения, начинающиеся с Telerik RadGrid

A Telerik RadGrid

... нормальный RadGrid с данными. И, если я CLIC на подряд, я хочу, чтобы получить это:

Another Telerik RadGrid

... список меток текстового поля пары (обратите внимание: это список данных получены из ряда, но не являются частью этого).

С первым RadGrid все в порядке. Поэтому я использовал простую таблицу HTML для списка пары (во втором изображении). Этот список генерируется с помощью кода, из базы данных.

Проблема заключается обновление из полого ввода: если я изменить эти текстовые поля и делать Clic на Боттоне Update, запускает myRadGrid_UpdateCommand метод. Но я не могу найти способ управлять этими текстовыми полями (они не отображаются в myRadGrid.Controls или еще).

Итак, я попытался использовать другой RadGrid внутри первого RadGrid, но не повезло ... Может быть, мне нужно использовать другой элемент управления Telerik?

Кто-то знает, как я могу это сделать?

Это часть моей реализации:

protected void myRadGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e) 
{ 
    this.myRadGrid.DataSource = this.dtListaDettagli; 
    this.dtListaDettagli.PrimaryKey = new DataColumn[] { this.dtListaDettagli.Columns["key"] }; 
} 


protected void myRadGrid_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e) 
{ 
    if (e.Item is GridEditFormItem && e.Item.IsInEditMode) 
    { 
     GridEditFormItem item = (GridEditFormItem)e.Item; 
     UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); 
     var listOfDetails = this.Session["listOfDetails"]; 
     //... 
     var dtoTrav = (List<Detail_Type_N>) listOfDetails; 
     PopolaUC(dtoTrav, userControl, e.Item.ItemIndex); 
    } 
} 


private void PopolaUC<T>(List<T> data, UserControl uc, int index) where T : FlussiBaseDto 
{ 
    // ... 
    RadPane radPane = uc.FindControl("RadPane1") as RadPane; 
    var properties = TypeDescriptor.GetProperties(typeof(Detail_Type_N)); 
    // ... 
    var dettaglioSelected = (from x in data 
          where x.IdFlusso == idFlussoSelected && x.ProgDettaglio == progDettaglioSelected 
          select x).FirstOrDefault(); 

    HtmlTable htmlTable = new HtmlTable(); 
    htmlTable.ID = "DettaglioSinistro"; 
    var tRow = new HtmlTableRow(); 

    int i = 0; 
    foreach (PropertyDescriptor prop in properties) 
    { 
     i++; 
     if (i > 3) // organizza la sottotabella in 2 colonne 
     { 
      tRow = new HtmlTableRow(); 
      i = 1; 
     } 

     // Set label: 
     HtmlTableCell tLabel = new HtmlTableCell(); 
     var stringInNormalCase = Regex.Replace(prop.Name, "(\\B[A-Z])", " $1"); 
     tLabel.InnerText = stringInNormalCase; 
     tRow.Cells.Add(tLabel); 

     // Set TextBox: 
     HtmlTableCell tCell = new HtmlTableCell(); 
     // ... 
     TextBox box = new TextBox(); 
     box.Text = Convert.ToString(prop.GetValue(detailSelected)); 
     box.ID = string.Format("my_{0}", prop.Name); 
     tCell.Controls.Add(box); 


     tRow.Cells.Add(tCell); 
     htmlTable.Rows.Add(tRow); 
    } 
    radPane.Controls.Add(htmlTable); 
} 


protected void myRadGrid_UpdateCommand(object source, GridCommandEventArgs e) 
{ 
    GridEditableItem editedItem = e.Item as GridEditableItem; 
    UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); 

    //Prepare new row to add it in the DataSource 
    DataRow[] changedRows = this.dtListaDettagli.Select("key = " + editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["key"]); 

    // ... and then? 

    catch (Exception ex) 
    { 
     changedRows[0].CancelEdit(); 

     Label lblError = new Label(); 
     lblError.Text = string.Format("Errore nell'aggiornamento movimento. Errore: {0} ", ex.Message); 
     lblError.ForeColor = System.Drawing.Color.Red; 
     RadGridIpa.Controls.Add(lblError); 

     e.Canceled = true; 
    } 
} 

+0

Смотрите эту статью, возможно, это поможет вам http://www.aspsnippets.com/Articles/Gridview-inside-Gridview-in-ASPNet-using-C-and-VBNet .aspx – Bayeni

ответ

0

Вы не можете создавать TextBoxes и ярлыки динамически.

Вместо этого вы хотите использовать Edit Form.

Например,

<telerik:RadGrid ID="RadGrid1" ...> 
    <MasterTableView> 
     ... 
     <EditFormSettings> 
      Place those textboxes and lables here. 
     </EditFormSettings> 
    </MasterTableView> 
</telerik:RadGrid> 
+0

Почему я не могу? Я уже сделал это ... Моя проблема в обновлении – Gioce90

+0

Ну. Вы можете добавить любое управление сервером динамически, но проблема с возвратом на пост-обратно. Эти динамически добавленные элементы управления не находятся в дереве управления, поэтому, когда страница возвращается, они становятся нулевыми. – Win

+0

Я понимаю. Это действительно странно ... есть способ обойти эту проблему? У меня действительно есть необходимость создавать ярлыки-текс-боксы динамически. – Gioce90

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