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

Load double Array into Radgrid

6 Answers 112 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Marcio Nascimento
Top achievements
Rank 1
Marcio Nascimento asked on 14 Apr 2011, 02:54 AM
Hi There!

I have tried to load a double array into Radgrid without success. Any Ideas ?

protected void Page_Load(object sender, EventArgs e)
{
    double[][] criterios = new double[][]
                            
                                new double[] {1,5,0.33333333,1},
                                new double[] {0,1,0.2,0.5},
                                new double[] {0,0,1,3},
                                new double[] {0,0,0,1}
                            };
    DataTable matrix = new DataTable();
    matrix = GetDataTableFromArray(criterios);
    RadGrid1.DataSource = matrix;
}
public static DataTable GetDataTableFromArray(object[] array)
{
    DataTable dataTable = new DataTable();
    dataTable.LoadDataRow(array, true);
    return dataTable;
}

Regards,

Marcio Nascimento

6 Answers, 1 is accepted

Sort by
0
Vasil
Telerik team
answered on 18 Apr 2011, 08:22 AM
Hello Marcio,

The LoadDataRow method can be used to load data into single row and not for loading several rows at a  time.
You can use this approach instead:
void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
 
    double[][] criterios = new double[][]
                        {
                            new double[] {1,5,0.33333333,1},
                            new double[] {0,1,0.2,0.5},
                            new double[] {0,0,1,3},
                            new double[] {0,0,0,1}
                        };
    DataTable matrix = new DataTable();
    matrix = GetDataTableFromArray(criterios);
    RadGrid2.DataSource = matrix;
}
 
 
public static DataTable GetDataTableFromArray(double[][] array)
{
    DataTable dataTable = new DataTable();
    if (array.Length > 0)
    {
        for (int c = 0; c < array[0].Length; c++)
        {
            dataTable.Columns.Add();
        }
    }
    foreach (double[] row in array)
    {
        DataRow dataRow = dataTable.NewRow();
        for (int i = 0; i < row.Length; i++)
            dataRow[i] = row[i];
        dataTable.Rows.Add(dataRow);
    }
    return dataTable;
}

Best wishes,
Vasil
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

0
Marcio Nascimento
Top achievements
Rank 1
answered on 21 Apr 2011, 06:29 AM
Hi Vasil ! Thanks a Lot !
I was wondering one more thing....
I Checked the "Auto-generate edit column at runtime" option for Radgrid. When I click "Edit", the Radgrid disappears.
It is possible to edit values the way you did in the code and update those values back to criterios double array ?

Regards,

Marcio Nascimento
0
Vasil
Telerik team
answered on 25 Apr 2011, 02:20 PM
Hi Marcio,

Could you write us the whole code that you use? When I tried to go in edit mode using auto-generated edit column it works as expected.

You can handle UpdateCommand to update the array manually. Similar approach is used in this demo.

Automatic operations can be used only for datasources that are supporting such operations and because of this you should update the array manually as mentioned above. See this help topic for more information about the automatic insert, update and delete.

Greetings,
Vasil
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

0
Marcio Nascimento
Top achievements
Rank 1
answered on 25 Apr 2011, 10:57 PM
Hi Vasil,

Here is the thing. When I click the button1, I fill my radgrid with data. When I edit a row, the radgrid is still there but I can't update the dataTable back if I change the values. I know that is some basic thing but I couldn't find any example of it.

I appreciate any help from you.

 

 

 

public static DataTable dtTable;

protected void Page_Load(object sender, EventArgs e)
{
}

protected void Button1_Click(object sender, EventArgs e)

 

{
    dtTable = new DataTable();
    dtTable.Columns.Add("Col 1");
    dtTable.Columns.Add("Col 2");
    dtTable.Columns.Add("Col 3");
    dtTable.Rows.Add(1,5,5);
    dtTable.Rows.Add(2,5,5);
    dtTable.Rows.Add(3,5,5);
    RadGrid1.DataSource = dtTable;
    RadGrid1.DataBind();
}

protected void RadGrid1_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    RadGrid1.DataSource = dtTable;
}
0
Marcio Nascimento
Top achievements
Rank 1
answered on 26 Apr 2011, 03:01 PM
Hi Vasil,

I'll explain better my needs.
It is common in my projects doing hard mathematical operations. Those operations request a lot of matrix calculations and the result should be visualized in a Grid. Until now, I have been doing this using SQL database to "convert" the double[][] array structure into a dataset, which Radgrid can read. However, with the increase of my system users, the calls to SQL Database will increase a lot too, exponentially.
So, I have been thinking...If I can convert those double arrays to read in RadGrid without needing SQL Database (which you already solved for me) and therefore I could save back those values into those double arrays, I could avoid all those calls to SQL Database and only storage and show the final result.

Could you help me in this task ?

Regards,

Marcio Nascimento 
0
Vasil
Telerik team
answered on 02 May 2011, 09:14 AM
Hi Marcio,

Here is an example how to update the values in the array:

Aspx:
<telerik:RadGrid ID="RadGrid2" runat="server" OnNeedDataSource="RadGrid2_NeedDataSource"
  OnUpdateCommand="RadGrid2_UpdateCommand" AutoGenerateEditColumn="true">
  <MasterTableView EditMode="InPlace">
  </MasterTableView>
</telerik:RadGrid>

C#:
protected void Page_Load(object sender, EventArgs e)
{
    if (Session["data"] == null)
    {
        double[][] criterios = new double[][]
                        {
                            new double[] {1,5,0.33333333,1},
                            new double[] {0,1,0.2,0.5},
                            new double[] {0,0,1,3},
                            new double[] {0,0,0,1}
                        };
        Session["data"] = criterios;
        //populate some data in the Session["data"]
    }
}
 
 
protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    RadGrid2.DataSource = GetDataTableFromArray((double[][])Session["data"]);
    //Use Session["data"] to generate Datasource for the grid
}
 
 
public static DataTable GetDataTableFromArray(double[][] array)
{
    DataTable dataTable = new DataTable();
    if (array.Length > 0)
    {
        for (int c = 0; c < array[0].Length; c++)
        {
            dataTable.Columns.Add();
        }
    }
    foreach (double[] row in array)
    {
        DataRow dataRow = dataTable.NewRow();
        for (int i = 0; i < row.Length; i++)
            dataRow[i] = row[i];
        dataTable.Rows.Add(dataRow);
    }
    return dataTable;
}
 
protected void RadGrid2_UpdateCommand(object sender, GridCommandEventArgs e)
{
    double[][] data = (double[][])Session["data"];
    //get the double array from the session object
 
    int row = e.Item.ItemIndex;
 
    for (int col = 0; col < data[row].Length; col++)
    {
        data[row][col] = double.Parse((e.Item.Controls[col + 3].Controls[0] as TextBox).Text);
        //Note that the column index abouve is "+3" because of the autogenerated controls from edit column
        //save edited values to the double array
    }
}

Kind regards,
Vasil
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

Tags
Grid
Asked by
Marcio Nascimento
Top achievements
Rank 1
Answers by
Vasil
Telerik team
Marcio Nascimento
Top achievements
Rank 1
Share this question
or