- Home
- Forum
- Xamarin.Forms
- How to add columns and Rows in SfDataGrid Programatically From ViewModel ?
How to add columns and Rows in SfDataGrid Programatically From ViewModel ?
Hi ,
i want to add rows and columns to SfDataGrid Programatically From ViewModel .let me know how can i do this .and also i want whenever scrolling i want to know what is the first element in the Grid Row "0" column "0" .
?
?
SIGN IN To post a reply.
3 Replies
DS
Divakar Subramaniam
Syncfusion Team
February 14, 2017 01:26 PM UTC
Hi Charwaka,
Thanks for contacting Syncfusion Support.
You can achieve your requirement (add rows/columns programmatically from ViewModel) using Command. Please refer the below code snippet.
| <StackLayout> <Button x:Name="btn1" Command="{Binding AddRowCommand}" CommandParameter="{x:Reference dataGrid}" Text="ClickToAddRow" /> <Button x:Name="btn2" Command="{Binding AddColumnCommand}" CommandParameter="{x:Reference dataGrid}" Text="ClickToAddColumn" /> <sfGrid:SfDataGrid ………> </StackLayout> // In ViewModel public ViewModel() { _addRow = new Command(ExecuteAddRow); _addColumn = new Command(ExecuteAddColumn); } #region Command methods private void ExecuteAddRow(object obj) { this.OrdersInfo.Insert(0,new OrderInfo() { OrderID = 10000, Country = "US", CustomerID = "Alfki",Freight = "345", IsClosed = true }); } private void ExecuteAddColumn(object obj) { var dataGrid = obj as SfDataGrid; (obj as SfDataGrid).Columns.Insert(0,new GridTextColumn() { MappingName = "OrderID" }); } #endregion #region Commands private Command _addRow; public Command AddRowCommand { get { return _addRow; } set { _addRow = value; } } private Command _addColumn; public Command AddColumnCommand { get { return _addColumn; } set { _addColumn = value; } } #endregion |
We have prepared a simple sample by achieved your requirement and you can dwonlaod the same from the below link.
It is not possible to get the first column/row while scrolling happens. However, you can get the first row/column using the below code snippet.
| dataGrid.GridLoaded += DataGrid_GridLoaded; private void DataGrid_GridLoaded(object sender, GridLoadedEventArgs e) { var firstColumn = dataGrid.Columns[0]; var firstRow = dataGrid.GetRowGenerator().Items.FirstOrDefault(x => x.RowType == RowType.DefaultRow).RowData; } |
Regards,
Divakar.
CH
Charwaka
February 15, 2017 04:50 PM UTC
i am trying to add columns dynamically like this. but as well as i need to generate Rows also for this Columns .how can i do this ?
please find attached screenshot
private async Task ExecutePullToRefresh()
{
var days = GetDaysInYear(DateTime.Now.Year);
for (int i = 0; i < days; i++)
{
if (DateTime.Now.AddDays(i).Day == 1)
{
App.CurrentGrid.Columns.Add(new GridTextColumn() { MappingName = "Month", HeaderText = DateTime.Now.AddDays(i).ToString("Y") });
}
else
{
App.CurrentGrid.Columns.Add(new GridTextColumn() { MappingName = "Date", HeaderText = String.Format("{0}" + Environment.NewLine + "{1}", DateTime.Now.AddDays(i).Day.ToString(), DateTime.Now.AddDays(i).DayOfWeek.ToString().Substring(0, 3)) });
}
}
}
public static int GetDaysInYear(int year)
{
var thisYear = new DateTime(year, 1, 1);
var nextYear = new DateTime(year + 1, 1, 1);
return (nextYear - thisYear).Days;
}
Attachment: Screenshot_2_cecf2cb8.rar
DS
Divakar Subramaniam
Syncfusion Team
February 16, 2017 10:47 AM UTC
Hi Charwaka,
Thanks for the update.
We have understand that you need to add the rows at runtime (like using PullToRefresh command) through viewmodel. We have modified the sample by adding the rows through PullToRefresh as you required and you can download the same from the below link.
Please let us know if you have any concerns.
Regards,
Divakar.
SIGN IN To post a reply.
- 3 Replies
- 2 Participants
-
CH Charwaka
- Feb 13, 2017 05:11 AM UTC
- Feb 16, 2017 10:47 AM UTC