Hi,
i have a grid with a GridViewDateTimeColumn. I want to prevent the user from inserting a date which is already exists so i don't have duplicates on the gridview (or the DB). how can i achieve that?
BTW:
Can you direct me to a good example of the GridViewDateTimeColumn.DistinctValues property? it seems like i can use it but i don't know how.
Thanks
i have a grid with a GridViewDateTimeColumn. I want to prevent the user from inserting a date which is already exists so i don't have duplicates on the gridview (or the DB). how can i achieve that?
BTW:
Can you direct me to a good example of the GridViewDateTimeColumn.DistinctValues property? it seems like i can use it but i don't know how.
Thanks
3 Answers, 1 is accepted
0
Hi Lior,
Thank you for writing.
You can use the SortedSet collection and CellValidating event to implement this functionality. Here is a example:
I hope this helps. Do not hesitate to contact us if you have further questions or issues.
Greetings,
Julian Benkov
the Telerik team
Thank you for writing.
You can use the SortedSet collection and CellValidating event to implement this functionality. Here is a example:
using System;using System.Collections.Generic;using System.Windows.Forms;using Telerik.WinControls.UI;namespace Lab.Grid{ public partial class GridUniqueValuesForm : Form { private RadGridView gridView = new RadGridView(); private SortedSet<DateTime> values = new SortedSet<DateTime>(); public GridUniqueValuesForm() { InitializeComponent(); gridView.Dock = DockStyle.Fill; gridView.Parent = this; gridView.ColumnCount = 3; gridView.RowCount = 10; GridViewDateTimeColumn dateColumn = new GridViewDateTimeColumn("MyColumn, MyColumn"); gridView.Columns.Add(dateColumn); gridView.ShowHeaderCellButtons = true; gridView.EnableFiltering = true; gridView.CellValidating += gridView_CellValidating; } void gridView_CellValidating(object sender, CellValidatingEventArgs e) { if(e.ColumnIndex == 3 && e.Value is DateTime) { DateTime date = DateTime.Parse(e.Value.ToString()); if (values.Contains(date)) { gridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = null; MessageBox.Show("My DateTime column contains this date."); } else { values.Add(date); } } if (e.ColumnIndex == 3 && e.OldValue is DateTime) { DateTime date = DateTime.Parse(e.OldValue.ToString()); values.Remove(date); } } }}I hope this helps. Do not hesitate to contact us if you have further questions or issues.
Greetings,
Julian Benkov
the Telerik team
Q3'12 SP1 of RadControls for WinForms is out now. See what's new.
0
ShareDocs
Top achievements
Rank 1
answered on 03 Feb 2013, 06:37 AM
Hi,
This solution isn't good for me since it assumes a blank grid and i use insert a DataTable to fill the grid before i can edit/insert the grid.
I thought there is a better way to find value inside the grid's collection (rather then generating an outside list).
anyway, this is the solution i implemented eventually:
This solution isn't good for me since it assumes a blank grid and i use insert a DataTable to fill the grid before i can edit/insert the grid.
I thought there is a better way to find value inside the grid's collection (rather then generating an outside list).
anyway, this is the solution i implemented eventually:
void grid_CellValidating(object sender, CellValidatingEventArgs e) { if (e.Value != null && e.Value != System.DBNull.Value && this.grdHafazot.IsInEditMode) { if (e.Column.Name == "ColumnName") string filterExp = e.OldValue != null ? "ColumnName = " + e.Value.ToString() + "and ColumnName <> " : "ColumnName = " e.OldValue.ToString() if ((grid.DataSource as DataTable).Select(filterExp).Length > 0) { e.Cancel = true; this.grid.ActiveEditor.Value = e.OldValue; } } }
0
Hi Lior,
Thank you for writing me back. I am glad to hear that you have found a solution that fits in your scenario. We still think that the best option in this scenario is to use an external collection. This way you will not observe performance issues when binding to a large DataTable.
Do not hesitate to contact us if you have further questions or issues.
Kind regards,
Julian Benkov
the Telerik team
Thank you for writing me back. I am glad to hear that you have found a solution that fits in your scenario. We still think that the best option in this scenario is to use an external collection. This way you will not observe performance issues when binding to a large DataTable.
Do not hesitate to contact us if you have further questions or issues.
Kind regards,
Julian Benkov
the Telerik team
Q3'12 SP1 of RadControls for WinForms is out now. See what's new.