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

Grid / Master/Detail Grids with DataTable

4 Answers 213 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Steve
Top achievements
Rank 2
Steve asked on 05 Feb 2013, 12:38 AM
I would like to use the following example but with datatables. I am customizing an existing app and the way they handle the data is only thru datatables.

Long story short, I can't figure out how to get this to work using DT. Any help would be appreciated.

http://demos.telerik.com/aspnet-ajax/grid/examples/programming/selectedvalue/defaultcs.aspx

Thank you.

4 Answers, 1 is accepted

Sort by
0
Shinu
Top achievements
Rank 2
answered on 05 Feb 2013, 05:50 AM
Hi,

Please take a look into the sample code snippet I tried.

C#:
protected void Page_PreRender(object sender, EventArgs e)
{
    if (RadGrid1.SelectedIndexes.Count == 0)
        RadGrid1.SelectedIndexes.Add(0);
    if (RadGrid2.SelectedIndexes.Count == 0)
    {
        RadGrid2.Rebind();
        RadGrid2.SelectedIndexes.Add(0);
    }
}
protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    RadGrid2.SelectedIndexes.Clear();
}
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    string selectQuery1 = "SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, PostalCode FROM Customers";
    SqlDataAdapter adapter1 = new SqlDataAdapter(selectQuery1, conn);
    conn.Open();
    DataTable dt1 = new DataTable();
    adapter1.Fill(dt1);
    conn.Close();
    RadGrid1.DataSource = dt1;   
}
public static string Customerid = "ALFKI";
protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    string selectQuery2 = "SELECT [OrderID], [OrderDate], [CustomerID], [ShipCountry] FROM [Orders] WHERE ([CustomerID] = '" + Customerid + "')";
    SqlDataAdapter adapter1 = new SqlDataAdapter(selectQuery2, conn);
    conn.Open();
    DataTable dt2 = new DataTable();
    adapter1.Fill(dt2);
    conn.Close();
    RadGrid2.DataSource = dt2;      
}
public static string Orderid = "10643";
protected void RadGrid3_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    string selectQuery3 = "SELECT [OrderID], [UnitPrice], [Quantity], [Discount] FROM [Order Details] WHERE ([OrderID] = '"+Orderid+"')";
    SqlDataAdapter adapter1 = new SqlDataAdapter(selectQuery3, conn);
    conn.Open();
    DataTable dt3 = new DataTable();
    adapter1.Fill(dt3);
    conn.Close();
    RadGrid3.DataSource = dt3;      
protected void RadGrid1_SelectedIndexChanged(object sender, EventArgs e)
{
    Customerid = (RadGrid1.SelectedItems[0] as GridDataItem).GetDataKeyValue("CustomerID").ToString();
}
protected void RadGrid2_SelectedIndexChanged(object sender, EventArgs e)
{
    Orderid = (RadGrid2.SelectedItems[0] as GridDataItem).GetDataKeyValue("OrderID").ToString();
}

Thanks,
Shinu.
0
Steve
Top achievements
Rank 2
answered on 05 Feb 2013, 04:57 PM
Thank you very much for your solution, I just have a few problems to get this adjusted to my environment.

1.) The grid does not load on page load.
2.) When I force it to load on page load, the second grid does not populate, actually not of the change events seem to fire.
3.) Paging does not work, when I click on another page, grid is gone.

I am sure I am missing something. I will include all my code.

ASPX:
<telerik:RadScriptManager runat="server" ID="RadScriptManager1" />
    <telerik:RadSkinManager ID="QsfSkinManager" runat="server" ShowChooser="true" />
    <telerik:RadFormDecorator ID="QsfFromDecorator" runat="server" DecoratedControls="All" EnableRoundedCorners="false" />
    <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadGrid1">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid1"></telerik:AjaxUpdatedControl>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid2"></telerik:AjaxUpdatedControl>
                     
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="RadGrid2">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="RadGrid2"></telerik:AjaxUpdatedControl>
                     
                </UpdatedControls>
            </telerik:AjaxSetting>
             
        </AjaxSettings>
    </telerik:RadAjaxManager>
    <h3>Customers:</h3>
    <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="true" PageSize="5" OnItemCommand="RadGrid1_ItemCommand">
        <ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
            <Selecting AllowRowSelect="true"></Selecting>
        </ClientSettings>
        <MasterTableView DataKeyNames="UIDREPORT">
        </MasterTableView>
        <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
    </telerik:RadGrid>
    <br />
    <br />
    <h3>Orders:</h3>
    <telerik:RadGrid ID="RadGrid2" ShowStatusBar="true" runat="server" AllowPaging="True" PageSize="5" >
        <MasterTableView Width="100%" AutoGenerateColumns="False" >
            <Columns>
                <telerik:GridBoundColumn DataField="UIDREPORT" DataType="System.Int32" HeaderText="UIDREPORT"
                    ReadOnly="True" SortExpression="UIDREPORT" UniqueName="UIDREPORT">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="RPTNAME" DataType="System.String" HeaderText="RPTNAME"
                    SortExpression="RPTNAME" UniqueName="RPTNAME" DataFormatString="{0:d}">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="RPTTITLE" HeaderText="RPTTITLE" SortExpression="RPTTITLE"
                    UniqueName="RPTTITLE">
                </telerik:GridBoundColumn>
            </Columns>
        </MasterTableView>
        <ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
            <Selecting AllowRowSelect="true"></Selecting>
        </ClientSettings>
        <PagerStyle Mode="NextPrevAndNumeric"></PagerStyle>
    </telerik:RadGrid>

C#:
public partial class WSS : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    
         
        if (!IsPostBack)
        {
            //BindProcesses("ESTIMATIONS", "", "", "");
             
        }
      
    }
 
    private void BindProcesses(string processType, string processName, string startTime, string stopTime)
    {
        AccountMDMDB accountMDB = new AccountMDMDB();
        DataTable dt = accountMDB.getProcesses(processType, processName, startTime, stopTime);
        RadGrid1.DataSource = dt;
        
         
    }
 
    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (RadGrid1.SelectedIndexes.Count == 0)
            RadGrid1.SelectedIndexes.Add(0);
        if (RadGrid2.SelectedIndexes.Count == 0)
        {
            RadGrid2.Rebind();
            RadGrid2.SelectedIndexes.Add(0);
        }
    }
 
 
    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
    {
        RadGrid2.SelectedIndexes.Clear();
         
    }
    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        AccountMDMDB accountMDB = new AccountMDMDB();
        DataTable dt = accountMDB.getProcesses("ESTIMATIONS", "", "", "");
        RadGrid1.DataSource = dt;
    }
    public static string Uid = "2233";
    protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        AccountMDMDB accountMdb = new AccountMDMDB();
        DataTable dt2 = accountMdb.getReports(Uid);
 
        RadGrid2.DataSource = dt2;
    }
    protected void RadGrid1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Uid = (RadGrid1.SelectedItems[0] as GridDataItem).GetDataKeyValue("UIDREPORT").ToString();
        Label1.Text = Uid;
    }
 
}
Again, thank you for your excellent support.
0
Accepted
Shinu
Top achievements
Rank 2
answered on 06 Feb 2013, 04:47 AM
Hi Steve,

Please make sure that you are attaching the NeedDataSource event for both the RadGrid and  SeletedIndexChanged event for the first RadGrid1 in the ASPX as follows.

ASPX:
<telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="true" PageSize="5" OnItemCommand="RadGrid1_ItemCommand"
    OnNeedDataSource="RadGrid1_NeedDataSource1" OnSelectedIndexChanged="RadGrid1_SelectedIndexChanged1">
 . . .
 
</telerik:RadGrid>
<telerik:RadGrid ID="RadGrid2" ShowStatusBar="true" runat="server" AllowPaging="True"
    PageSize="5" OnNeedDataSource="RadGrid2_NeedDataSource1">
 
. . .
</telerik:RadGrid>

Thanks,
Shinu.
0
Steve
Top achievements
Rank 2
answered on 06 Feb 2013, 02:20 PM
Thank you so very much !! That did it. I overlooked that completely.

Your support rocks!!
Tags
Grid
Asked by
Steve
Top achievements
Rank 2
Answers by
Shinu
Top achievements
Rank 2
Steve
Top achievements
Rank 2
Share this question
or