8 Answers, 1 is accepted
0
Richard Slade
Top achievements
Rank 2
answered on 05 Mar 2012, 01:04 PM
Hi Bevis,
The most efficient way to do this would be to provide it to the grid already in the datasource if possible.
Hope that helps
Richard
The most efficient way to do this would be to provide it to the grid already in the datasource if possible.
Hope that helps
Richard
0
Bevis
Top achievements
Rank 1
answered on 05 Mar 2012, 02:48 PM
My case is when user input the Length, Width and Height, the Volume column will display the CBM which is Length x Width x Height and they can adjust the result (CBM Column) as they wish. And also I have another grid for input invoice charges with same behavior i.e. Unit Price x Quantity = Amount.
I don't want to popup a modal form to do the input, but in the grid. Can it be done!
Thanks
I don't want to popup a modal form to do the input, but in the grid. Can it be done!
Thanks
0
Richard Slade
Top achievements
Rank 2
answered on 05 Mar 2012, 03:25 PM
Hi Bevis,
There may be many ways to do this. Here is a small example of one way. It just assumes you have a RadGridView on a form
Hope that helps
Richard
There may be many ways to do this. Here is a small example of one way. It just assumes you have a RadGridView on a form
using System.Windows.Forms;using Telerik.WinControls.UI;using System.Collections.Generic;namespace RadControlsWinFormsApp1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); List<Product> products = new List<Product>(); products.Add(new Product(2, 2, 3)); products.Add(new Product(3, 2, 3)); products.Add(new Product(4, 2, 3)); this.radGridView1.DataSource = products; this.radGridView1.Columns["Width"].ReadOnly = false; this.radGridView1.Columns["Height"].ReadOnly = false; this.radGridView1.Columns["Length"].ReadOnly = false; this.radGridView1.Columns["CBM"].ReadOnly = true; this.radGridView1.AutoGenerateColumns = true; } } public class Product { public Product(decimal length, decimal height, decimal width) { this.Length = length; this.Height = height; this.Width = width; } public decimal Length { get; set; } public decimal Height { get; set; } public decimal Width { get; set; } public decimal CBM { get { return (this.Length * this.Width * this.Height); } set { } } }}Hope that helps
Richard
0
Richard Slade
Top achievements
Rank 2
answered on 05 Mar 2012, 03:29 PM
Bevis,
Apologies, I missed off the empty contructor for a new row.
Apologies, I missed off the empty contructor for a new row.
public Product(){}0
Bevis
Top achievements
Rank 1
answered on 05 Mar 2012, 03:36 PM
Simply I have four columns as follow:
|| length || width || height || CBM ||
When I input 10 in Length, 10 in width and 10 in height the the CBM column will automatic display 1000 (10x10x10). It can be manage in edit mode, but how can I do it in the Add New Row which the RowIndex is -1 and cannot reference to any rows values.
|| length || width || height || CBM ||
When I input 10 in Length, 10 in width and 10 in height the the CBM column will automatic display 1000 (10x10x10). It can be manage in edit mode, but how can I do it in the Add New Row which the RowIndex is -1 and cannot reference to any rows values.
Private Sub dbList_CellEndEdit(sender As Object, e As Telerik.WinControls.UI.GridViewCellEventArgs) Handles dbList.CellEndEdit Select Case e.Column.Name Case "p_len", "p_width", "p_height" Dim l As Decimal l = cn(dbList.Rows(e.RowIndex).Cells("p_len").Value) * cn(dbList.Rows(e.RowIndex).Cells("p_width").Value) * cn(dbList.Rows(e.RowIndex).Cells("p_height").Value) dbList.Rows(e.RowIndex).Cells("total_cbm").Value = l End SelectEnd Sub0
Bevis
Top achievements
Rank 1
answered on 06 Mar 2012, 06:45 PM
Hi Richard,
I got a solution as following:
first check the e.RowIndex is -1 (=new row), then set the datasource default value with something with some calucation.
Thanks,
If e.RowIndex <> -1 Then Select Case e.Column.Name Case "p_len", "p_width", "p_height" Dim l As Decimal l = cn(dbList.Rows(e.RowIndex).Cells("p_len").Value) * cn(dbList.Rows(e.RowIndex).Cells("p_width").Value) * cn(dbList.Rows(e.RowIndex).Cells("p_height").Value) / 1000000 dbList.Rows(e.RowIndex).Cells("total_cbm").Value = l End Select Else Select Case e.Column.Name Case "p_len" len = e.Value Case "p_width" wid = e.Value Case "p_height" hei = e.Value rsDtl.Columns("total_cbm").DefaultValue = len * wid * hei / 1000000 End Select End If0
Hi guys,
Thank you for writing.
You can use the CellValueChanged to calculate the value in your sum column. Here is a code snippet which demonstrates this:
I hope this will be useful for you. Should you have further questions, I would be glad to assist.
All the best,
Ivan Petrov
the Telerik team
Thank you for writing.
You can use the CellValueChanged to calculate the value in your sum column. Here is a code snippet which demonstrates this:
private void MasterTemplate_CellValueChanged(object sender, GridViewCellEventArgs e){ if (e.Row is GridViewNewRowInfo) { decimal valueCol0 = 0; decimal valueCol1 = 0; decimal valueCol2 = 0; if (e.Row.Cells[0].Value != null) { valueCol0 = (decimal)e.Row.Cells[0].Value; } if (e.Row.Cells[1].Value != null) { valueCol1 = (decimal)e.Row.Cells[1].Value; } if (e.Row.Cells[2].Value != null) { valueCol1 = (decimal)e.Row.Cells[2].Value; } e.Row.Cells[3].Value = valueCol0 + valueCol1 + valueCol2; }}I hope this will be useful for you. Should you have further questions, I would be glad to assist.
All the best,
Ivan Petrov
the Telerik team
RadControls for WinForms Q1'12 release is now live! Check out what's new or download a free trial >>
0
Bevis
Top achievements
Rank 1
answered on 07 Mar 2012, 03:01 PM
Great, thats what I want and it works very well. Thank you very much!