繁体   English   中英

从Telerik RadGrid开始读取/编辑值

[英]Read/edit values starting from a Telerik RadGrid

我有这种情况:

Telerik RadGrid

...带有数据的普通RadGrid。 而且,如果我连续行,我想获得以下内容:

另一个Telerik RadGrid

...一个标签-文本框对的列表(请注意:这些数据列表是从行中获得的,但不是行的一部分)。

有了第一个RadGrid,就可以了。 因此,我使用了一个简单的HTML表作为配对列表(在第二张图片中)。 该列表是从数据库中代码生成的。

问题是TextBox的更新 :如果我编辑这些文本框并在Update Botton上执行clic,则启动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;
    }
}

您不能动态生成TextBoxes和Labels。

相反,您想使用Edit Form

例如,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM