I have a number of nested detail tables. All of the levels of nesting show data except the deepest level. I verified the DataReader being used contains the correct data, it simply doesn't show up.
Thank you.
| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using System.Web; |
| using System.Web.UI; |
| using System.Web.UI.WebControls; |
| using System.Data; |
| using System.Data.Odbc; |
| using Telerik.Web.UI; |
| namespace preTOPS |
| { |
| public partial class Home : System.Web.UI.Page |
| { |
| OdbcConnection connection; |
| User u = null; |
| protected override void OnInit(EventArgs e) |
| { |
| base.OnInit(e); |
| connection = Master.connection; |
| try |
| { |
| if (Session["user"] == null) |
| { |
| u = new User(); |
| u.emailAddress = "foo@bar.com"; |
| //throw new Exception("@You must be logged in to view this page. Please <a href='Default.aspx' style='color:White; text-decoration:underline;'>login</a>."); |
| } |
| else |
| { |
| u = (User)Session["user"]; |
| } |
| DefineGridStructure(); |
| } |
| catch (Exception ex) |
| { |
| MyUtilities.DoError(Master.maindiv, Master.errordiv, Master.lblError, ex, connection, null, Master.GetUserName()); |
| } |
| } |
| protected void Page_Load(object sender, EventArgs e) |
| { |
| if (!Master.maindiv.Visible) |
| return; |
| RadGrid grid = (RadGrid)PlaceHolder1.FindControl("grid1"); |
| RadAjaxManager1.AjaxSettings.AddAjaxSetting(grid, grid); |
| } |
| private void DefineGridStructure() |
| { |
| RadGrid grid = new RadGrid(); |
| grid.ID = "grid1"; |
| grid.CssClass = "maindiv"; |
| grid.Width = Unit.Percentage(100); |
| grid.PageSize = 10; |
| grid.AllowPaging = true; |
| // grid.AllowSorting = true; |
| // grid.AllowFilteringByColumn = true; |
| grid.AllowAutomaticDeletes = true; |
| grid.AllowAutomaticInserts = true; |
| grid.AllowAutomaticUpdates = true; |
| grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; |
| grid.AutoGenerateColumns = false; |
| // grid.GroupingEnabled = true; |
| // grid.ShowGroupPanel = true; |
| // grid.ShowStatusBar = true; |
| // grid.ClientSettings.AllowDragToGroup = true; |
| grid.NeedDataSource += new GridNeedDataSourceEventHandler(grid_NeedIndications); |
| grid.ItemCommand += new GridCommandEventHandler(grid_ItemCommand); |
| grid.ItemUpdated += new GridUpdatedEventHandler(grid_ItemUpdated); |
| // grid.MasterTableView.AllowFilteringByColumn = true; |
| grid.MasterTableView.PageSize = 15; |
| grid.MasterTableView.DataKeyNames = new string[] { "indication" }; |
| grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top; |
| GridEditCommandColumn e = new GridEditCommandColumn(); |
| e.UniqueName = "IndicationEditButton"; |
| e.ButtonType = GridButtonColumnType.ImageButton; |
| e.HeaderStyle.Width = Unit.Pixel(20); |
| grid.MasterTableView.Columns.Add(e); |
| GridBoundColumn c = new GridBoundColumn(); |
| c.DataField = "indication"; |
| c.HeaderText = "Indication"; |
| // c.SortExpression = "indication"; |
| // c.UniqueName = "indication"; |
| // c.AllowSorting = true; |
| // c.AllowFiltering = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| grid.MasterTableView.Columns.Add(c); |
| GridButtonColumn b = new GridButtonColumn(); |
| b.ConfirmText = "Confirm deletion of indication?"; |
| b.ButtonType = GridButtonColumnType.ImageButton; |
| b.CommandName = "Delete"; |
| b.CommandArgument = "indication"; |
| b.UniqueName = "IndicationDeleteButton"; |
| b.HeaderStyle.Width = Unit.Pixel(20); |
| b.Text = "Delete"; |
| grid.MasterTableView.Columns.Add(b); |
| // grid.MasterTableView.GroupByExpressions.Add(new GridGroupByExpression("Indication Group By Indication")); |
| // PROTOCOLS |
| GridTableView tvProtocols = new GridTableView(grid); |
| // tvProtocols.AllowFilteringByColumn = true; |
| tvProtocols.Name = "Protocols"; |
| tvProtocols.Width = Unit.Percentage(100); |
| tvProtocols.DataKeyNames = new string[] { "protocol" }; |
| tvProtocols.CommandItemDisplay = GridCommandItemDisplay.Top; |
| //tvProtocols.AllowFilteringByColumn = true; |
| // tvProtocols.AllowSorting = true; |
| // tvProtocols.AllowMultiColumnSorting = true; |
| // tvProtocols.AllowPaging = true; |
| tvProtocols.AllowAutomaticDeletes = true; |
| tvProtocols.AllowAutomaticInserts = true; |
| tvProtocols.AllowAutomaticUpdates = true; |
| e = new GridEditCommandColumn(); |
| e.UniqueName = "ProtocolEditButton"; |
| e.ButtonType = GridButtonColumnType.ImageButton; |
| e.HeaderStyle.Width = Unit.Pixel(20); |
| tvProtocols.Columns.Add(e); |
| c = new GridBoundColumn(); |
| c.DataField = "protocol"; |
| c.HeaderText = "Protocol"; |
| // c.SortExpression = "protocol"; |
| // c.UniqueName = "protocol"; |
| // c.AllowSorting = true; |
| // c.AllowFiltering = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvProtocols.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "sponsor"; |
| c.HeaderText = "Sponsor"; |
| // c.UniqueName = "sponsor"; |
| // c.SortExpression = "sponsor"; |
| // c.AllowSorting = true; |
| // c.AllowFiltering = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvProtocols.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "shorttitle"; |
| c.HeaderText = "Short Title"; |
| // c.AllowSorting = true; |
| // c.AllowFiltering = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvProtocols.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "cro"; |
| c.HeaderText = "CRO"; |
| // c.AllowSorting = true; |
| // c.AllowFiltering = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvProtocols.Columns.Add(c); |
| b = new GridButtonColumn(); |
| b.ConfirmText = "Confirm deletion of protocol?"; |
| b.ButtonType = GridButtonColumnType.ImageButton; |
| b.CommandName = "Delete"; |
| b.CommandArgument = "protocol"; |
| b.UniqueName = "ProtocolDeleteButton"; |
| b.HeaderStyle.Width = Unit.Pixel(20); |
| b.Text = "Delete"; |
| tvProtocols.Columns.Add(b); |
| GridRelationFields rf = new GridRelationFields(); |
| rf.MasterKeyField = "indication"; |
| rf.DetailKeyField = "indication"; |
| tvProtocols.ParentTableRelation.Add(rf); |
| // STUDIES |
| GridTableView tvStudies = new GridTableView(grid); |
| // tvStudies.AllowFilteringByColumn = true; |
| tvStudies.Name = "Studies"; |
| tvStudies.Width = Unit.Percentage(100); |
| tvStudies.DataKeyNames = new string[] { "protocol", "site", "facility" }; |
| // tvStudies.AllowSorting = true; |
| // tvStudies.AllowMultiColumnSorting = true; |
| // tvStudies.AllowPaging = true; |
| tvStudies.CommandItemDisplay = GridCommandItemDisplay.Top; |
| tvStudies.AllowAutomaticDeletes = true; |
| tvStudies.AllowAutomaticInserts = true; |
| tvStudies.AllowAutomaticUpdates = true; |
| e = new GridEditCommandColumn(); |
| e.UniqueName = "StudyEditButton"; |
| e.ButtonType = GridButtonColumnType.ImageButton; |
| e.HeaderStyle.Width = Unit.Pixel(20); |
| tvStudies.Columns.Add(e); |
| c = new GridBoundColumn(); |
| c.DataField = "site"; |
| c.HeaderText = "Site"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "facility"; |
| c.HeaderText = "Facilities"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "pi"; |
| c.HeaderText = "PI"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "status"; |
| c.HeaderText = "Status"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "firstcontact"; |
| c.HeaderText = "First Contact"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "cdareceived"; |
| c.HeaderText = "CDA Received"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "sqv"; |
| c.HeaderText = "SQV"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "irbsubmission"; |
| c.HeaderText = "IRB Submission"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "irbapproval"; |
| c.HeaderText = "IRB Approval"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "siv"; |
| c.HeaderText = "SIV"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "firstpatientenrolled"; |
| c.HeaderText = "1st P Enrolled"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "lastpatientenrolled"; |
| c.HeaderText = "Last P Enrolled"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvStudies.Columns.Add(c); |
| b = new GridButtonColumn(); |
| b.ConfirmText = "Confirm deletion of study?"; |
| b.ButtonType = GridButtonColumnType.ImageButton; |
| b.CommandName = "Delete"; |
| b.CommandArgument = "study"; |
| b.UniqueName = "StudyDeleteButton"; |
| b.HeaderStyle.Width = Unit.Pixel(20); |
| b.Text = "Delete"; |
| tvStudies.Columns.Add(b); |
| rf = new GridRelationFields(); |
| rf.MasterKeyField = "protocol"; |
| rf.DetailKeyField = "protocol"; |
| tvStudies.ParentTableRelation.Add(rf); |
| // Comments |
| GridTableView tvComments = new GridTableView(grid); |
| // tvComments.AllowFilteringByColumn = true; |
| tvComments.Name = "Comments"; |
| tvComments.Width = Unit.Percentage(100); |
| tvComments.DataKeyNames = new string[] { "studyid", "commentmodified" }; |
| // tvComments.AllowSorting = true; |
| // tvComments.AllowMultiColumnSorting = true; |
| // tvComments.AllowPaging = true; |
| tvComments.CommandItemDisplay = GridCommandItemDisplay.Top; |
| tvComments.AllowAutomaticDeletes = true; |
| tvComments.AllowAutomaticInserts = true; |
| tvComments.AllowAutomaticUpdates = true; |
| e = new GridEditCommandColumn(); |
| e.UniqueName = "CommentEditButton"; |
| e.ButtonType = GridButtonColumnType.ImageButton; |
| e.HeaderStyle.Width = Unit.Pixel(20); |
| tvComments.Columns.Add(e); |
| c = new GridBoundColumn(); |
| c.DataField = "commentmodified"; |
| c.HeaderText = "Last Modifed"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.DateTime"); |
| c.DataFormatString = "{0:MM/dd/yyyy}"; |
| tvComments.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "author"; |
| c.HeaderText = "Modified By"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvComments.Columns.Add(c); |
| c = new GridBoundColumn(); |
| c.DataField = "comment"; |
| c.HeaderText = "Comment"; |
| // c.AllowFiltering = true; |
| // c.AllowSorting = true; |
| // c.DataType = System.Type.GetType("System.String"); |
| tvComments.Columns.Add(c); |
| b = new GridButtonColumn(); |
| b.ConfirmText = "Confirm deletion of comment?"; |
| b.ButtonType = GridButtonColumnType.ImageButton; |
| b.CommandName = "Delete"; |
| b.CommandArgument = "comment"; |
| b.UniqueName = "CommentDeleteButton"; |
| b.HeaderStyle.Width = Unit.Pixel(20); |
| b.Text = "Delete"; |
| tvComments.Columns.Add(b); |
| rf = new GridRelationFields(); |
| rf.MasterKeyField = "studyid"; |
| rf.DetailKeyField = "studyid"; |
| tvComments.ParentTableRelation.Add(rf); |
| tvStudies.DetailTables.Add(tvComments); |
| tvProtocols.DetailTables.Add(tvStudies); |
| grid.MasterTableView.DetailTables.Add(tvProtocols); |
| PlaceHolder1.Controls.Add(grid); |
| } |
| void grid_ItemUpdated(object source, GridUpdatedEventArgs e) |
| { |
| } |
| void grid_ItemCommand(object source, GridCommandEventArgs e) |
| { |
| if (e.CommandName == "Update") |
| { |
| if (e.Item is GridEditFormItem) |
| { |
| GridEditFormItem gefi = (GridEditFormItem)e.Item; |
| } |
| } |
| else if (e.CommandName == "Insert") |
| { |
| } |
| else if (e.CommandName == "Delete") |
| { |
| } |
| } |
| void grid_NeedIndications(object source, GridNeedDataSourceEventArgs e) |
| { |
| OdbcCommand command1 = new OdbcCommand("select indication from indications order by indication asc;", connection); |
| OdbcDataReader reader1 = command1.ExecuteReader(); |
| RadGrid grid = (RadGrid)PlaceHolder1.FindControl("grid1"); |
| grid.DataSource = reader1; |
| OdbcCommand command2 = new OdbcCommand("select * from protocols;", connection); |
| OdbcDataReader reader2 = command2.ExecuteReader(); |
| grid.MasterTableView.DetailTables[0].DataSource = reader2; |
| OdbcCommand command3 = new OdbcCommand("select * from studies;", connection); |
| OdbcDataReader reader3 = command3.ExecuteReader(); |
| grid.MasterTableView.DetailTables[0].DetailTables[0].DataSource = reader3; |
| OdbcCommand command4 = new OdbcCommand("select * from comments;", connection); |
| OdbcDataReader reader4 = command4.ExecuteReader(); |
| grid.MasterTableView.DetailTables[0].DetailTables[0].DetailTables[0].DataSource = reader4; |
| } |
| } |
| } |
Thank you.