Hi,
I've a radlistview and I used its itemDataBound event to attach datakey value to another control to do some staffs.
Previously, my radlistview don't have grouping. But with new requirement, I added grouping to my listview.
Then, I'm getting "Argument out of range exception" when accessing data key value inside ItemDataBound event.
I've reproduced the error and you can see in my sample project below.
This is my Markup File of RadListView.
This is my code behind.
In this sample project, I change button text with DataKeyValue.
It works only for first two items. Then it throw "argument out of range exception".
I have no idea what's wrong with my code.
You can see it by throwing exception from inner try-catch block.
This is my first time using radlistview with grouping.
So, if there is anything I configured incorrectly, please point me out.
Is data structure OK? (see GetDataTable())
Thanks in advanced,
Robin
I've a radlistview and I used its itemDataBound event to attach datakey value to another control to do some staffs.
Previously, my radlistview don't have grouping. But with new requirement, I added grouping to my listview.
Then, I'm getting "Argument out of range exception" when accessing data key value inside ItemDataBound event.
I've reproduced the error and you can see in my sample project below.
This is my Markup File of RadListView.
<telerik:RadListView ID="lvTest" runat="server" attrib="Temp" ItemPlaceholderID="ItemPlaceHolder1" AllowPaging="true" OnNeedDataSource="lvTest_NeedDataSource" OnItemDataBound="lvTest_ItemDataBound" GroupAggregatesScope="AllItems" DataKeyNames="product_id"> <ItemTemplate> <table style="width:100%;background-color:whitesmoke;border-bottom:1px solid silver;"> <tr> <td style="width:100px">Code: </td> <td> <%#Eval("Code") %> <asp:Button ID="btnLookup" runat="server" Text="View Details" /> </td> </tr> <tr> <td>Name: </td> <td> <%#Eval("Name") %> </td> </tr> <tr> <td>Description: </td> <td> <%#Eval("Desc") %> </td> </tr> </table> </ItemTemplate> <LayoutTemplate> <asp:Panel ID="DataGroupPlaceHolder1" runat="server"> </asp:Panel> </LayoutTemplate> <DataGroups> <telerik:ListViewDataGroup GroupField="company_name" DataGroupPlaceholderID="DataGroupPlaceHolder1"> <DataGroupTemplate> <table style="border: 1px solid lightgrey; background-color: silver; width:100%;"> <tr> <td style="background-color: silver; color: white; font-weight: bold;"> <%# (Container as RadListViewDataGroupItem).DataGroupKey %> </td> </tr> <tr> <td> <asp:Panel runat="server" ID="ItemPlaceHolder1"></asp:Panel> </td> </tr> </table> </DataGroupTemplate> <GroupAggregates> <telerik:ListViewDataGroupAggregate Aggregate="Min" DataField="company_id"/> </GroupAggregates> </telerik:ListViewDataGroup> </DataGroups> <GroupSeparatorTemplate> <div style="background-color: lightgray;height:10px"> </div> </GroupSeparatorTemplate></telerik:RadListView>This is my code behind.
protected void Page_Load(object sender, EventArgs e){ if (!Page.IsPostBack) { lvTest.DataBind(); }}protected void lvTest_NeedDataSource(object sender, Telerik.Web.UI.RadListViewNeedDataSourceEventArgs e){ lvTest.DataSource = GetDataTable();}private object GetDataTable(){ DataTable l_Table = new DataTable(); l_Table.Columns.Add("product_id"); l_Table.Columns.Add("Code"); l_Table.Columns.Add("Name"); l_Table.Columns.Add("Desc"); l_Table.Columns.Add("company_id"); l_Table.Columns.Add("company_name"); l_Table.Rows.Add(new string[] { "1", "C001", "Code 001", "Description 001", "1", "Company 1" }); l_Table.Rows.Add(new string[] { "2", "C002", "Code 002", "Description 002", "1", "Company 1" }); l_Table.Rows.Add(new string[] { "3", "C003", "Code 003", "Description 003", "1", "Company 1" }); l_Table.Rows.Add(new string[] { "4", "C004", "Code 004", "Description 004", "2", "Company 2" }); l_Table.Rows.Add(new string[] { "5", "C005", "Code 005", "Description 005", "2", "Company 2" }); l_Table.Rows.Add(new string[] { "6", "C006", "Code 006", "Description 006", "2", "Company 2" }); l_Table.Rows.Add(new string[] { "7", "C007", "Code 007", "Description 007", "2", "Company 2" }); l_Table.Rows.Add(new string[] { "8", "C008", "Code 008", "Description 008", "2", "Company 2" }); l_Table.Rows.Add(new string[] { "9", "C009", "Code 009", "Description 009", "3", "Company 3" }); l_Table.Rows.Add(new string[] { "10", "C010", "Code 010", "Description 010", "3", "Company 3" }); l_Table.Rows.Add(new string[] { "11", "C011", "Code 011", "Description 011", "3", "Company 3" }); l_Table.Rows.Add(new string[] { "12", "C012", "Code 012", "Description 012", "3", "Company 3" }); l_Table.Rows.Add(new string[] { "13", "C013", "Code 013", "Description 013", "4", "Company 4" }); l_Table.Rows.Add(new string[] { "14", "C014", "Code 014", "Description 014", "4", "Company 4" }); l_Table.Rows.Add(new string[] { "15", "C015", "Code 015", "Description 015", "4", "Company 4" }); l_Table.Rows.Add(new string[] { "16", "C016", "Code 016", "Description 016", "4", "Company 4" }); l_Table.Rows.Add(new string[] { "17", "C017", "Code 017", "Description 017", "5", "Company 5" }); l_Table.Rows.Add(new string[] { "18", "C018", "Code 018", "Description 018", "6", "Company 6" }); l_Table.Rows.Add(new string[] { "19", "C019", "Code 019", "Description 019", "6", "Company 6" }); l_Table.Rows.Add(new string[] { "20", "C020", "Code 020", "Description 020", "7", "Company 7" }); l_Table.Rows.Add(new string[] { "21", "C021", "Code 021", "Description 021", "8", "Company 8" }); l_Table.Rows.Add(new string[] { "22", "C022", "Code 022", "Description 022", "8", "Company 8" }); l_Table.Rows.Add(new string[] { "23", "C023", "Code 023", "Description 023", "8", "Company 8" }); l_Table.Rows.Add(new string[] { "24", "C024", "Code 024", "Description 024", "8", "Company 8" }); return l_Table;}protected void lvTest_ItemDataBound(object sender, Telerik.Web.UI.RadListViewItemEventArgs e){ try { if (e.Item is RadListViewDataItem) { if (e.Item.FindControl("btnLookup") != null) { try { string l_product_ID = (e.Item as RadListViewDataItem).GetDataKeyValue("product_id").ToString(); (e.Item.FindControl("btnLookup") as Button).Text = "View: " + l_product_ID; } catch (Exception) { } } } } catch (Exception ex) { }}In this sample project, I change button text with DataKeyValue.
It works only for first two items. Then it throw "argument out of range exception".
I have no idea what's wrong with my code.
You can see it by throwing exception from inner try-catch block.
This is my first time using radlistview with grouping.
So, if there is anything I configured incorrectly, please point me out.
Is data structure OK? (see GetDataTable())
Thanks in advanced,
Robin