Hi.
I have a RadGridView object named rgvLinkList that contains a GridViewCommandColumn. I use a table that is read from an Access database as the data source (but I don't show all the columns in the database in the grid, I hide some). Then I add a command column to the grid, and take the button text in each row from another column (one of the hidden columns) in the grid.
My problem is: I want to add a filter to the command column, I tried to do something similar to the one described at the address below but failed.
https://www.telerik.com/forums/filtering-on-a-command-column#ZuNrDBneqEmAi9qmv8ZXtQ
The method I use for setting data source, adding command column and hiding some columns:
public void fillRgvWithLinks(RadGridView source) { string msg = ""; try { int i = 0; source.DataSource = IOC.linksData.getAllLinks(out msg); source.Columns[i++].HeaderText = "Sıra No"; // 0 source.Columns[i++].HeaderText = "Ana Grup"; // 1 source.Columns[i++].HeaderText = "Alt Grup"; // 2 source.Columns[i++].HeaderText = "Sürüm"; // 3 hide this source.Columns[i++].HeaderText = "Başlık"; // 4 source.Columns[i++].HeaderText = "Adres"; // 5 hide this source.Columns[i++].HeaderText = "Doğrulama Url"; // 6 hide this source.Columns[i++].HeaderText = "Açıklama"; // 7 hide this source.Columns[i++].HeaderText = "Anahtar Kelimeler"; // 8 hide this source.Columns[i++].HeaderText = "Komutlar"; // 9 hide this source.Columns.Add(AddCommandColumnToRgv()); foreach (var item in source.Columns) { if (item.Index == 0 || item.Index == 1 || item.Index == 2 || item.Index == 10) { continue; } item.IsVisible = false; } } catch (Exception ex) { msg = ex.Message.ToString(); } }
Add column method:
public static CustomCommandColumn AddCommandColumnToRgv() { CustomCommandColumn CommandColumn = new CustomCommandColumn(); CommandColumn.Name = "LinkButon"; CommandColumn.HeaderText = "Linke Git"; CommandColumn.UseDefaultText = false; CommandColumn.FormatInfo = new System.Globalization.CultureInfo("tr-TR"); return CommandColumn; }
CustomCommandColumn class:
public class CustomCommandColumn : GridViewCommandColumn { public CustomCommandColumn(): base() { } public CustomCommandColumn(string name): base(name) { } public override bool AllowFiltering { get { return true; } } }CellFormatting event of my RadGridView :
private void rgvLinkList_CellFormatting(object sender, CellFormattingEventArgs e) { if (e.Row is GridViewDataRowInfo) { GridCommandCellElement commandCell = e.CellElement as GridCommandCellElement; if(commandCell != null) { commandCell.CommandButton.Text = e.Row.Cells[4].Value.ToString(); } } }
CellBeginEditevent of my RadGridView, The descs array here consists of text values (text above buttons) read from a column in the database (Similar to Emanuel Varga's example) :
private void rgvLinkList_CellBeginEdit(object sender, GridViewCellCancelEventArgs e) { string msg = ""; try { if (rgvLinkList.Columns[e.ColumnIndex].Name != "LinkButon") { return; } var editor = rgvLinkList.ActiveEditor as RadDropDownListEditor; var dropDownElement = editor.EditorElement as RadDropDownListEditorElement; string[] descs = IOC.linksData.getDescriptions(out msg); dropDownElement.DataSource = descs; } catch (Exception ex) { msg = ex.Message.ToString(); } }
And EditorRequired event of my RadGridView (Again, similar to the example of Emanuel Varga) :
private void rgvLinkList_EditorRequired(object sender, EditorRequiredEventArgs e) { var editManager = sender as GridViewEditManager; if (editManager == null || rgvLinkList.CurrentColumn.Name != "LinkButon") { return; } e.Editor = new RadDropDownListEditor(); e.EditorType = typeof(RadDropDownListEditor); }
I was able to add a filter to the column after all, but when I type something in the filter text box nothing happens. I wonder what is missing or wrong?
