【问题标题】:How Can I get Cell Values from Telerik RadGrid如何从 Telerik RadGrid 获取单元格值
【发布时间】:2019-04-20 11:24:18
【问题描述】:

我在从 Radgrid 自动生成的插入表单中获取值时遇到问题。

我的 radgrid 设置如下所示。我只进行插入和删除操作,并且正在使用单击添加新记录按钮时自动打开的编辑表单。

    <div id ="specialrequestGrid" class="container">
    <div class="row">
        <div class="col-md-12">
            <telerik:RadAjaxPanel runat="server">
                <telerik:RadGrid ID="SpecialRequests" runat="server" OnInsertCommand="SpecialRequests_InsertCommand"
                     OnUpdateCommand="SpecialRequests_UpdateCommand"
                     OnItemCommand="SpecialRequests_ItemCommand"
                     AllowAutomaticInserts="false"
                     AutoGenerateColumns="false"
                     OnNeedDataSource="SpecialRequests_NeedDataSource">
                    <MasterTableView CommandItemDisplay="Top" DataKeyNames="CaseId_FK, ReqId" Font-Size="Medium" NoMasterRecordsText="No Special Requests">
                        <CommandItemSettings AddNewRecordImageUrl="../Images/Add.png" />
                        <Columns>
                            <telerik:GridTemplateColumn HeaderText="Request Date" UniqueName="DateTemplateColumn">
                                <ItemTemplate>
                                        <asp:Label ID="DateEditItemTemplate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Date","{0:MM/dd/yyyy}") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <telerik:RadDatePicker ID="dpRideDate" runat="server" DateInput-DateFormat="MM/dd/yyyy" DbSelectedDate='<%# Bind("Date") %>' MinDate="1999/1/1" UniqueName="dpRideDate">
                                        </telerik:RadDatePicker>
                                    </EditItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="Requested By ID" UniqueName="RequestorTemplateColumn">
                                <ItemTemplate>
                                        <asp:Label ID="Requestor" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "RequesterEID_FK") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <button id="btnRequestEID" type="button" class="btn"  data-toggle="modal" data-target="#myModal" >--Please Select--</button>
                                        <div>
                                        <input type="text" Id="TxtSPRequestName" disabled  />
                                    </div>
                                    </EditItemTemplate>
                            </telerik:GridTemplateColumn>
                            <telerik:GridTemplateColumn HeaderText="Request Reason" UniqueName="RequestReason">
                                    <ItemTemplate>
                                        <asp:Label ID="ItemTemplatelblRequestReason" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Reason") %>'>
                                        </asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:Label ID="lblRequestReason" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Reason") %>' Visible="false">
                                        </asp:Label>
                                        <asp:TextBox runat="server" ID="txtReason" Text='<%# DataBinder.Eval(Container.DataItem, "Reason") %>'></asp:TextBox>
                                    </EditItemTemplate>
                                </telerik:GridTemplateColumn>
                            <telerik:GridCheckBoxColumn DataField="IsWOO" HeaderText="Is Out of Order" UniqueName="ISWOO"></telerik:GridCheckBoxColumn>
                        </Columns>
                    </MasterTableView>
                </telerik:RadGrid>

            </telerik:RadAjaxPanel>
        </div>
    </div>

</div>

这是我点击添加新记录时自动生成的表单的截图

当我单击表单上的插入链接时,我会运行此 C# 代码

protected void SpecialRequests_InsertCommand(object sender, GridCommandEventArgs e)
    {

        GridEditableItem editedItem = e.Item as GridEditableItem;
        UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);

        T_SpecialRequests t = new T_SpecialRequests();
        t.IsWOO = (userControl.FindControl("IsWOO") as CheckBox).Checked;
    }

请注意,IsWOO 是 Radgrid 中的一个控件,我没有在屏幕截图中显示。当我单击保存链接时,插入函数,如上所示运行,但出现以下错误:

http://localhost:52028/bundles/MsAjaxJs?v=c42ygB2U07n37m_Sfa8ZbLGVu4Rr2gsBo7MvUEnJeZ81 中第 1 行第 123034 列的未处理异常

0x800a139e - JavaScript 运行时错误:Sys.WebForms.PageRequestManagerServerErrorException:对象引用未设置为对象的实例。

奇怪的是我在其他几个项目中使用相同的代码没有任何问题。唯一的区别是这是我第一次使用这种自动生成的表格。由于字段数量如此之少,我不想为此 Radgrid 使用另一种类型的控件,只有 4 个控件。

我花了几个小时寻找答案,但找不到解决方案。

如何从这个自动生成的表单中获取值?

【问题讨论】:

    标签: telerik radgrid


    【解决方案1】:

    你可以使用

    t.IsWOO = (editedItem["ISWOO"].Controls[0] as CheckBox).Checked; 
    

    var newValues = new Dictionary<string, object>();
    e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);
    t.IsWOO = (bool)newValues["IsWOO"];
    

    第一种方法通过索引引用控件,因为不幸的是它没有 ID。

    第二个对于一个属性来说有点冗长,但如果有更多属性,我肯定会更喜欢它。

    【讨论】:

    • 第二个选项是一个很好的答案,我也可以在其他项目中使用它。
    【解决方案2】:

    虽然@Michal Nawrocik 是正确的,但我发现我在读取 Radgrid 中的所有控件时仍然存在一些问题。我能够在 Telerik 论坛上找到答案,发现您必须根据列类型使用不同的代码。我有 2 种不同类型的列。

    下面的代码显示了我用来获取表单上所有控件值的方法

    protected void SpecialRequests_InsertCommand(object sender, GridCommandEventArgs e)
        {
            try
            {
             using(LatentEntities db = new LatentEntities())
                {
                    if (e.Item is GridEditableItem)
                    {
                        T_SpecialRequests T = new T_SpecialRequests();
                        var editableItem = ((GridEditableItem)e.Item);
                        RadDatePicker picker = (RadDatePicker)editableItem.FindControl("dpDate"); // in EditItem Template
                        DateTime dt = Convert.ToDateTime(picker.DbSelectedDate);
                        T.Date = dt;
                        TextBox Reason = (TextBox)editableItem.FindControl("txtReason"); //This Control was in an Edit Item Template
                        T.Reason = Reason.Text;
                        T.IsWOO = (editableItem["ISWOO"].Controls[0] as CheckBox).Checked; //In CheckBox Column 
    
    
                    }
                }
    

    如果控件在 Telerik:GridtboundColumn 中,我使用以下代码:

    string strFirstName = (editableItem["firstname"].Controls[0] as TextBox).Text;
    

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多