【问题标题】:Telerik RadGrid causes Value Exception when in edit mode?Telerik RadGrid 在编辑模式下会导致值异常?
【发布时间】:2016-07-29 10:45:02
【问题描述】:

我当然希望有人能在我还剩下一点理智的时候帮我解决这个问题:(

我有一个 radgrid,通过 LINQ 查询进行数据绑定。它按原样显示,我添加了一个可以正常工作的详细信息按钮。但是当我点击编辑按钮时,我得到: “JavaScript 运行时错误:Sys.WebForms.PageRequestManagerServerErrorException:选择超出范围 参数名称:值"

我仔细研究了我得到的值,我没有发现明显或其他问题。我的网格如下(抱歉,有点乱):

 <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False" 
        CellSpacing="0" GridLines="None" AllowPaging="True" 
       DataMember="id" 
        onneeddatasource="RadGrid1_NeedDataSource" 
            OnUpdateCommand="RadGrid1_UpdateCommand" PageSize="20" 
            onitemcommand="RadGrid1_ItemCommand" >
<MasterTableView DataKeyNames="status,charity,make,model,year,vin,date,id,salePrice,bid,note" 
            EditMode="EditForms" EnableViewState="True">

<CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings>

<RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column">
<HeaderStyle Width="20px"></HeaderStyle>
</RowIndicatorColumn>

<ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column">
<HeaderStyle Width="20px"></HeaderStyle>
</ExpandCollapseColumn>

    <Columns>
    <telerik:GridButtonColumn CommandName="History" Text="History" UniqueName="detailBtn" HeaderText="History" HeaderButtonType="PushButton" AutoPostBackOnFilter="True">
                        </telerik:GridButtonColumn>
     <telerik:GridBoundColumn HeaderText="Charity" ItemStyle-Width="140px" FilterControlAltText="Filter column2 column" 
            UniqueName="column3" DataType="System.String" DataField="charity" ReadOnly="True">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn>
         <telerik:GridBoundColumn HeaderText="VIN" ItemStyle-Width="140px" FilterControlAltText="Filter column6 column" 
            UniqueName="column7" DataType="System.String" DataField="vin" >
<ItemStyle Width="140px"></ItemStyle>
             </telerik:GridBoundColumn>
      <telerik:GridBoundColumn HeaderText="Year" ItemStyle-Width="140px" FilterControlAltText="Filter column2 column" 
            UniqueName="column2" DataType="System.Int32" DataField="year">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn HeaderText="Make" ItemStyle-Width="140px" FilterControlAltText="Filter column column" 
            UniqueName="column" DataType="System.String" DataField="make">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn HeaderText="Model" ItemStyle-Width="140px" FilterControlAltText="Filter column1 column" 
            UniqueName="column1" DataType="System.String" DataField="model">
<ItemStyle Width="140px"></ItemStyle>
            </telerik:GridBoundColumn>            
             <telerik:GridBoundColumn HeaderText="Last Update" ItemStyle-Width="140px" FilterControlAltText="Filter column1 column" 
            UniqueName="column5" DataType="System.DateTime" DataField="date" ReadOnly="True">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn>
         <telerik:GridBoundColumn HeaderText="Min. Bid" ItemStyle-Width="140px" FilterControlAltText="Filter column1 column" 
            UniqueName="column8" DataType="System.Decimal" DataField="bid" DataFormatString="{0:C}" >
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn>
        <telerik:GridBoundColumn  HeaderText="Sale Price" ItemStyle-Width="140px" FilterControlAltText="Filter column1 column" 
            UniqueName="column6" DataType="System.Decimal" DataField="salePrice" DataFormatString="{0:C}" Display="False">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn> 
        <telerik:GridBoundColumn  HeaderText="Notes" ItemStyle-Width="140px" FilterControlAltText="Filter column1 column" 
            UniqueName="unsoldNotesColumn" DataType="System.String" DataField="note" Display="True">
<ItemStyle Width="140px"></ItemStyle>
        </telerik:GridBoundColumn> 
      <telerik:GridTemplateColumn HeaderText="Latest Status" ItemStyle-Width="240px">


                        <ItemTemplate>

                            <%#DataBinder.Eval(Container.DataItem, "Status")%>

                        </ItemTemplate>


                        <EditItemTemplate>

                            <telerik:RadComboBox RenderMode="Lightweight" runat="server" ID="updateComboBox" DataTextField="Status" 

                                DataValueField="ID" DataSourceID="LinqDataSource1" SelectedValue='<%#Bind("ID") %>' AutoPostBack="True"
                                >

                            </telerik:RadComboBox>                          

                        </EditItemTemplate>


<ItemStyle Width="240px"></ItemStyle>


                    </telerik:GridTemplateColumn>

                    <telerik:GridEditCommandColumn FooterText="EditCommand footer" UniqueName="EditCommandColumn"

                        HeaderText="Edit" HeaderStyle-Width="100px" UpdateText="Update">

<HeaderStyle Width="100px"></HeaderStyle>

                    </telerik:GridEditCommandColumn>



    </Columns>

<EditFormSettings>
<EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn>
</EditFormSettings>
</MasterTableView>

<FilterMenu EnableImageSprites="False"></FilterMenu>
    </telerik:RadGrid>

如果与此有关,我的代码隐藏是:

 private void LoadUnsoldVehicleGrid()
        {


            CAAData2DataContext db = new CAAData2DataContext();


            var ud = db.Updates

             .Where(c => c.Sold.Equals(false))
             .GroupBy(c => c.Vehicle)
            .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList();

            var unSoldVehicles = (from u in ud
                                  join v in db.Vehicles on
                                      u.Vehicle equals v.ID
                                  join c in db.Customers on
                                  v.Charity equals c.ID
                                  select new  
                                {
                                    status = u.Status,
                                    make = v.Make,
                                    model = v.Model,
                                    Year = v.Year,
                                    vin = v.VIN_,
                                    charity = c.Name,
                                    date = u.TimeStamp,
                                    id = u.Vehicle,
                                    salePrice = v.SalePrice,
                                    bid = v.MinimumBid,
                                    note=u.Note
                                }).OrderBy(z=>z.charity).ToList();

            RadGrid1.DataSource = unSoldVehicles;



        }

完全令人沮丧的是……这很有效。我一定是在不经意间改变了一些东西,当我意识到这一切……呃

如果有任何见解,我将不胜感激!

保罗

【问题讨论】:

    标签: c# asp.net telerik


    【解决方案1】:
    <telerik:RadComboBox RenderMode="Lightweight" runat="server" ID="updateComboBox" DataTextField="Status" DataValueField="ID" DataSourceID="LinqDataSource1" SelectedValue='<%#Bind("ID") %>' AutoPostBack="True">
    </telerik:RadComboBox>  
    

    问题很可能来自上述代码块。您可以做的是在RadComboBox 控件上调用DataBind 方法之后在后面的代码中设置SelectedValue。希望对您有所帮助。

    protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item.IsInEditMode) 
        {
            GridEditableItem editItem = (GridEditableItem)e.Item;
            RadComboBox combo = (RadComboBox)editItem.FindControl("updateComboBox"); 
            combo.DataBind(); 
            combo.SelectedValue = DataBinder.Eval(editItem.DataItem,"ID").ToString();
        }
    }
    

    【讨论】:

    • 你是我的救星 ;) 我在编辑模式下使用组合框,所以我最终得到:protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) {if (e.Item.IsInEditMode) {GridEditableItem editItem = (GridEditableItem)e.Item; RadComboBox 组合 = (RadComboBox)editItem.FindControl("updateComboBox");组合.DataBind(); combo.SelectedValue = DataBinder.Eval(editItem.DataItem,"ID").ToString(); }} 我无法开始告诉你我是多么感激......我昨天花了一整天的时间在这上面。奇怪的是它一直工作到......非常感谢!
    • 我是这里的菜鸟,所以我想确保我标记了你,让你知道我是多么感激。令我惊讶的是,这么多具有​​如此丰富专业知识的人如此慷慨地投入时间来帮助初学者!我对编码很陌生(甚至直到五十多岁才开始),但我在电子、建筑和摄影方面确实有深厚的背景。请让我知道我是否可以回报这个人情!再次感谢你,你真的让我很开心!!!
    • @PaulBinCT2 完全不用担心。很高兴听到它对你有用。非常感谢所有的客气话。我们每天都在学习新的东西,因为技术永远不会停止发展。我也是其他一些领域的初学者,我从 SO 的许多其他人那里得到了很多帮助。对我来说,回报人情的最好方式是尽我所能帮助那些需要帮助的人。你帮我,我帮你,大家帮大家。这就是 SO 精神,不是吗:)
    • @PaulBinCT2 顺便说一下,这是我的电子邮件 gary[dot]woodkid[at]gmail[dot]com,如果你想私下给我发消息或其他什么。很确定我们有很多东西要互相学习。 :)
    • 谢谢加里!你救了我的培根,我不会忘记的。同样,请随时在 traineronly{at}hotmailcom 上联系我,很高兴见到你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2012-03-31
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多