This is a migrated thread and some comments may be shown as answers.

ShowHeadersWhenNoRecords in Detailtable

1 Answer 105 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Tosj
Top achievements
Rank 1
Tosj asked on 18 Jul 2011, 08:42 AM
Hi,

I'm currently having the problem, that my "add new record" button isn't showing in my detailgrid..
Even so, my grid does not show the expandbutton, to open the detailgrid.
I'm currently aware that there are no records to retrieve from the database, but however it must show the text "No items to display"

I included a screenshot for more information.

This is the code:
public void Page_Load(object sender, EventArgs e)
{
    // Get Total ProcessTemplates
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MSCBE.DashboardConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("SELECT COUNT(ProcessTemplate_id) AS total FROM ProcessTemplate", conn);
    conn.Open();
    int intTotalProcessTemplates = Convert.ToInt32(cmd.ExecuteScalar());
    conn.Close();
    // Create grids
    RadGrid[] GridName = new RadGrid[intTotalProcessTemplates];
     
    for (int i = 0; i < intTotalProcessTemplates; ++i)
    {
        // Create mastertable
        GridName[i] = new RadGrid();
        GridName[i].DataSource = GetDataTables.GetDataTable("SELECT * FROM ProcessTemplate WHERE ProcessTemplate_id = " + (i + 1));
        GridName[i].MasterTableView.DataKeyNames = new string[] { "ProcessTemplate_id" };
        GridName[i].Skin = "Black";
        GridName[i].AutoGenerateColumns = false;
        GridName[i].AllowPaging = true;
        GridName[i].ShowStatusBar = true;
        // Columns create
        GridName[i].MasterTableView.Columns.Add(CreateGridColumn("Process name", "Name", 10.0));
        GridName[i].MasterTableView.Columns.Add(CreateGridColumn("Process description", "Description", 80.0));
        GridName[i].MasterTableView.Columns.Add(CreateGridColumn("Parent", "Parent", 10.0));
        // Create detail table
        GridTableView tableViewStartProcesses = new GridTableView(GridName[i]);
        tableViewStartProcesses.Name = "DetailTable_" + i;
        tableViewStartProcesses.DataKeyNames = new string[] { "Process_id" };
        tableViewStartProcesses.AutoGenerateColumns = false;
        tableViewStartProcesses.AllowPaging = true;
        tableViewStartProcesses.ShowFooter = true;
        tableViewStartProcesses.ShowHeadersWhenNoRecords = true;
        tableViewStartProcesses.CommandItemDisplay = GridCommandItemDisplay.Top;
        
        // Reset Counter
        //Count[i] = new int();
        int counter = 0;
        CountItems countitem = new CountItems();
        countitem.id = i;
        // Fix result from stored proc: GetAllProcessesAndSteps_SP
        DataSet _dataset = BLProcessesAndSteps.GetAllProcessesAndSteps((i + 1));
        if (_dataset.Tables.Count > 0)
        {
            var query = from r in _dataset.Tables[0].AsEnumerable()
                        where r.Field<decimal>("templateid") == (i + 1) // DO NOT REMOVE FROM STORED PROC                            
                        select r;
            // Get total columns
            int TotalColumns = query.AsDataView().Table.Columns.Count;
              
            GridBoundColumn[] gbcColumnName = new GridBoundColumn[TotalColumns];
              
            // Loop trough header items
            for (int j = 0; j < TotalColumns; ++j)
            {
                // Create detailcolumns
                gbcColumnName[j] = new GridBoundColumn();
                gbcColumnName[j].ReadOnly = true;
                string strData = query.AsDataView().Table.Columns[j].ToString();
                if (strData == "Process_id" || strData == "templateId" || strData == "ProcessName")
                {
                    gbcColumnName[j].Visible = false;
                    gbcColumnName[j].ReadOnly = true;
                }
                string strQuery = "SELECT DISTINCT(CriteriaType.Name), CriteriaType.CriteriaType_id, Process.ProcessTemplate_id FROM CriteriaType INNER JOIN CriteriaValue ON CriteriaType.CriteriaType_id = CriteriaValue.CriteriaType_id INNER JOIN Process ON CriteriaValue.Process_id = Process.Process_id WHERE Process.ProcessTemplate_id = " + (i + 1);
                DataTable dtCriteriaTypes = GetDataTables.GetDataTable(strQuery);
                string[] strValues = new string[dtCriteriaTypes.AsDataView().Table.Rows.Count];
                  
                 
                for (int k = 0; k < dtCriteriaTypes.AsDataView().Table.Rows.Count; ++k)
                {
                    strValues[k] = dtCriteriaTypes.AsDataView().Table.Rows[k]["Name"].ToString();
                    if (strData == strValues[k])
                    {
                        gbcColumnName[j].ReadOnly = false ;
                        counter++;
                    }
                }
                countitem.count=counter;
                  
                gbcColumnName[j].HeaderText = strData;
                gbcColumnName[j].DataField = strData;
                // Add detailcolumns
                tableViewStartProcesses.Columns.Add(gbcColumnName[j]);
            }
            Count.Add(countitem);
            // Add Details to table
            GridName[i].MasterTableView.DetailTables.Add(tableViewStartProcesses);
            // Rebind
            tableViewStartProcesses.DataSource = query.AsDataView();
        }
        // Add to placeholder
        this.StartProcessPlaceHolder.Controls.Add(GridName[i]);
        // Events
        GridName[i].InsertCommand += new GridCommandEventHandler(OverviewProcess_InsertCommand);
    }

1 Answer, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 18 Jul 2011, 09:16 AM
Hello Tosj,

The hierarchical structure is not supported with simple data-binding . And also remember to check the condition (Not IsPostBack) to avoid adding the same structure objects to the grid twice. This is important because no ViewState is managed for the object before it has been added to the corresponding collection.

Check out the following demo which demonstrates the same.
Grid / Creating Hierarchy Programmatically.

Thanks,
Shinu.
Tags
Grid
Asked by
Tosj
Top achievements
Rank 1
Answers by
Shinu
Top achievements
Rank 2
Share this question
or