Matt Dowling
Top achievements
Rank 1
Matt Dowling
asked on 26 Aug 2008, 08:40 PM
I have a Grid, that is using a single datasource, but one of the columns is a text field and can be exceptionally long. I would like to use the a detail table to host this information so that it is hidden down below, so if they want to see the MessageBody of the row, they have to expand the details view, is this possible?
The data look something like this:
ID Name Date Action MessageBody
The data look something like this:
ID Name Date Action MessageBody
5 Answers, 1 is accepted
0
Princy
Top achievements
Rank 2
answered on 27 Aug 2008, 04:20 AM
Hi Matt,
You can use Grid hiearachy to achieve the desired scenario. Bind both Master and Detail tables with the same DataSource. Add only one column in the detail table and set its DataField = "MessageBody". Also set the ParentTableRelation in the Detail table.
ASPX:
Thanks
Princy.
You can use Grid hiearachy to achieve the desired scenario. Bind both Master and Detail tables with the same DataSource. Add only one column in the detail table and set its DataField = "MessageBody". Also set the ParentTableRelation in the Detail table.
ASPX:
<telerik:RadGrid ID="RadGrid2" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" |
GridLines="None"> |
<MasterTableView DataSourceID="SqlDataSource1" DataKeyNames="ID"> |
<Columns> |
<telerik:GridBoundColumn UniqueName="ID" DataField="ID" HeaderText="ID" > |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn UniqueName="Name" DataField="Name" HeaderText="Name" > |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn UniqueName="Date" DataField="Date" HeaderText="Date" > |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn UniqueName="Action" DataField="Action" HeaderText="Action" > |
</telerik:GridBoundColumn> |
</Columns> |
<DetailTables> |
<telerik:GridTableView DataSourceID="SqlDataSource1" runat="server" DataKeyNames="ID" > |
<ParentTableRelation> |
<telerik:GridRelationFields DetailKeyField="ID" MasterKeyField="ID" /> |
</ParentTableRelation> |
<Columns> |
<telerik:GridBoundColumn UniqueName="MessageBody" DataField="MessageBody" HeaderText="MessageBody" > |
</telerik:GridBoundColumn> |
</Columns> |
</telerik:GridTableView> |
</DetailTables> |
</MasterTableView> |
</telerik:RadGrid> |
Thanks
Princy.
0
Matt Dowling
Top achievements
Rank 1
answered on 27 Aug 2008, 04:40 PM
Here is what I have so far. <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False" |
GridLines="None" DataSourceID="appMessageDataSource" Skin="Hay" > |
<MasterTableView DataSourceID="appMessageDataSource" DataKeyNames="MessageId"> |
<RowIndicatorColumn> |
<HeaderStyle Width="20px" /> |
</RowIndicatorColumn> |
<ExpandCollapseColumn> |
<HeaderStyle Width="20px" /> |
</ExpandCollapseColumn> |
<Columns> |
<telerik:GridBoundColumn DataField="MessageId" DataType="System.Int32" HeaderText="MessageId" SortExpression="MessageId" UniqueName="MessageId" /> |
<telerik:GridBoundColumn DataField="MessageDate" DataType="System.DateTime" HeaderText="Date" SortExpression="MessageDate" UniqueName="MessageDate" /> |
<telerik:GridBoundColumn DataField="MessageUserName" HeaderText="User Name" SortExpression="MessageUserName" UniqueName="MessageUserName" /> |
<telerik:GridBoundColumn DataField="AppActionName" HeaderText="Action" SortExpression="AppActionName" UniqueName="AppActionName" /> |
</Columns> |
<DetailTables> |
<telerik:GridTableView ShowHeader="false" DataSourceID="appMessageDataSource" DataKeyNames="MessageId"> |
<ParentTableRelation> |
<telerik:GridRelationFields DetailKeyField="MessageId" MasterKeyField="MessageId" /> |
</ParentTableRelation> |
<Columns> |
<telerik:GridBoundColumn DataField="Body" UniqueName="Body" /> |
</Columns> |
</telerik:GridTableView> |
</DetailTables> |
</MasterTableView> |
</telerik:RadGrid> |
This doesn't work because say i have 2 messages, MessageID 1 and MessageID 2. I get 2 parent rows, and the detail table of each parent row has both bodies.
The data from the datasource looks like this:
MessageID Date Body Action User
1 9/1/2008 Body for 1 Update Matt
2 9/2/2008 Body for 2 Update Matt
The result looks like this
- MessageID Date Action User
- 1 9/1/2008 Update Matt
- Body
- Body for 1
- Body for 2
- 2 9/2/2008 Update Matt
- Body
- Body for 1
- Body for 2
0
Matt Dowling
Top achievements
Rank 1
answered on 27 Aug 2008, 07:06 PM
Additionally I am using an ObjectDataSource, not sure if that matters. but I just wanted to be through.
0
Princy
Top achievements
Rank 2
answered on 28 Aug 2008, 05:29 AM
Hi Matt,
Here is the code I tried on my end to set up a hierarchical relationship as you have mentioned. In this case I have used two SqlDataSources set to the same table from the DataBase.
Here is the Aspx I tried:
Thanks
Princy.
Here is the code I tried on my end to set up a hierarchical relationship as you have mentioned. In this case I have used two SqlDataSources set to the same table from the DataBase.
Here is the Aspx I tried:
<telerik:RadGrid ID="RadGrid1" runat="server" AllowMultiRowEdit="True" AllowPaging="True" PageSize="3" AllowMultiRowSelection="True" DataSourceID="SqlDataSource1" GridLines="None" > |
<MasterTableView DataSourceID="SqlDataSource1" ShowFooter="True" Name="Master" AllowSorting="True" DataKeyNames="RollNo" CommandItemDisplay="Top" > |
<Columns> |
<telerik:GridBoundColumn DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" |
UniqueName="FirstName"> |
<FooterStyle HorizontalAlign="Right" /> |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn DataField="RollNo" DataType="System.Int32" HeaderText="RollNo" |
SortExpression="RollNo" UniqueName="RollNo"> |
</telerik:GridBoundColumn> |
<telerik:GridBoundColumn DataField="Division" DataType="System.Int32" HeaderText="Division" |
SortExpression="Division" UniqueName="Division"> |
</telerik:GridBoundColumn> |
</Columns> |
<DetailTables> |
<telerik:GridTableView runat="server" Name="Detail" DataKeyNames="RollNo" DataSourceID="SqlDataSource2" > |
<ParentTableRelation> |
<telerik:GridRelationFields DetailKeyField="RollNo" MasterKeyField="RollNo" /> |
</ParentTableRelation> |
<Columns> |
<telerik:GridBoundColumn DataField="LastName" HeaderText="LastName" SortExpression="LastName" |
UniqueName="LastName"> |
</telerik:GridBoundColumn> |
</Columns> |
</telerik:GridTableView> |
</DetailTables> |
</MasterTableView> |
</telerik:RadGrid> |
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyDataBaseConnectionString %>" |
SelectCommand="SELECT * FROM [Students]"> |
</asp:SqlDataSource> |
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:MyDataBaseConnectionString %>" |
SelectCommand="SELECT [LastName], [RollNo] FROM [Students] WHERE ([RollNo] = @RollNo)"> |
<SelectParameters> |
<asp:Parameter Name="RollNo" Type="Int32" /> |
</SelectParameters> |
</asp:SqlDataSource> |
Thanks
Princy.
0
Matt Dowling
Top achievements
Rank 1
answered on 28 Aug 2008, 04:02 PM
This is the route I'm taking but you would think that making a second trip to the database is kind of wasteful considering the first query already has the desired data. I really don't want to make a 2 database calls for a single row. For now, this is what I'm going to do, but it less than optimal.
Matt
Matt