When in batch edit mode, using standard asp.net validation controls will display the validation error within the cell, and expand the cell contents horizontally and possibly vertically as well. This is a very ugly (and clunky) way to show validation messages in a batch edit mode. It would be nice if instead, we could set an grid attribute that specifies a row backcolor when validation fails for a row. In addition, show that rows validation messages automatically in a tooltip or radtooltip as the user hovers the mouse over the row when it signifies the exception backcolor. These messages could be assigned to a columns markup as an attribute. Another nice to have is to show a section on the grid (perhaps under the header) that could display to alert the user when validation had failed.
The client-side KeyPress event is falling out of favor and the KeyDown even is being used more. Please implement an OnKeyDown event for the Grid, just like you currently have an OnKeyPress event
Workaround for the NextPrevAndNumeric mode is to set the AssociatedControlID of the label protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) { if (e.Item is GridPagerItem) { GridPagerItem pager = e.Item as GridPagerItem; Label lbl = pager.FindControl("ChangePageSizeLabel") as Label; Panel pnl = lbl.Parent as Panel; RadComboBox combo = pnl.FindControl("PageSizeComboBox") as RadComboBox; lbl.AssociatedControlID = combo.ID; } } <telerik:RadGrid RenderMode="Lightweight" ID="RadGrid1" runat="server" DataSourceID="SqlDataSource1" AllowSorting="True" AllowPaging="True" GridLines="None" Width="100%" OnItemDataBound="RadGrid1_ItemDataBound"> <PagerStyle Mode="NextPrevAndNumeric" Position="TopAndBottom" PageSizeControlType="RadComboBox"></PagerStyle> </telerik:RadGrid> <asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" ProviderName="System.Data.SqlClient" SelectCommand="SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, PostalCode FROM Customers" runat="server"></asp:SqlDataSource>
Th header context menu of the Grid gets closed on click (select/deselect a column) if the Grid is initially scrolled horizontally. Video: https://www.screencast.com/t/Gm1FLHia Steps to reproduce: 1. Open the Live Demos solution for "UI for ASP.NET AJAX R1 2017" in VS2015; 2. Open the page "UI for ASP.NET AJAX R1 2017\Live Demos\Grid\Examples\Functionality\Scrolling\scrolling\DefaultCS.aspx"; 3. Enable the HeaderContextMenu by setting EnableHeaderContextMenu="True" in the tag telerik:RadGrid; 4. Disable the column freezing. 5. Run the Demo and open the page "Grid\Examples\Functionality\Scrolling\scrolling\DefaultCS.aspx"; 6. Scroll the horizontal scrollbar of the grid to the right; 7. Right click on the column header and pick the Columns from the context menu; 8. Select or unselect any column, the Column Chooser will close by itself; 9. Now, scroll the horizontal scrollbar of the grid all the way to the left; 10. Right click on the column header and pick the Column Chooser from the context menu; 11. Select or unselect any columns, the Column Chooser won't close by itself.
To overcome this issue you can do the following: - For anchor links (a) implement onclick event with window.location. - For submit buttons set UseSubmitBehavior property to false.
You would get something like (([createddate] >= '01/08/2017,00:00:00') AND ([createddate] <= '14/08/2017,23:59:59')) while you should get something like (([createddate] >= '01/08/2017 00:00:00') AND ([createddate] <= '14/08/2017 23:59:59')) so that the SQL syntax is valid. RadGrid, does not send the FilterExpression to the SqlDataSource, however. It executes the SELECT statement and then filters the resulting data on its own. This works fine. If you will be performing operations yourself, you could use a string operation before passing the filter expression. For example: protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { if (!string.IsNullOrEmpty(this.RadGrid1.MasterTableView.FilterExpression)) { if (this.RadGrid1.MasterTableView.FilterExpression.Contains("createddate")) { this.RadGrid1.MasterTableView.FilterExpression = this.RadGrid1.MasterTableView.FilterExpression.Replace(",", " "); } DataView dv =GetData("select * from [myTable] where ", this.RadGrid1.MasterTableView.FilterExpression); //where you would need to have something like (([createddate] >= '01/08/2017 00:00:00') AND ([createddate] <= '14/08/2017 23:59:59')) this.RadGrid1.DataSource = dv; } } Note that implementing such a change may break existing code that relies on the current syntax that contains the comma.
For Bug Report : Note: We are using MM/dd/yyyy as Internal Date format to prevent issue while inserting or updating value. Steps to reproduce: When we use dd-MM-yyyy and yyyy-dd-MM Date DisplayFformat for RadDatePicker/RadDateTimePicker control as well as view mode in Radgrid Batch Edit mode it's render behaviour is inconsistent 1. When dd is less than or equal to 12 then while rendering in edit mode Month and Date is interchanged 2. When dd is greather than 12 then while rendering in edit mode Month and Date is rendered correctly.
Provide a simple interface to showcase exactly in what order the columns have been sorted in (ex. 1, 2, 3, etc in column header) - matching the functionality in Kendo UI Grid: http://demos.telerik.com/kendo-ui/grid/sorting
In some cases, inside the Grid table, the tfoot element is rendered before the tbody element. This causes some readers to read the footer before the body.
A possible workaround is moving the tfoot after the tbody in the OnGridCreated event:
<script>
function OnGridCreated(sender, args) {
var $ = $telerik.$;
$('tfoot').each(function (index, item) {
var $item = $(item);
var $next = $item.next();
if ($next[0]) {
if ($next[0].tagName.toLowerCase() == "tbody") {
$item.insertAfter($next);
}
}
});
}
</script>
A forum discussion on the topic:
The reason for the behavior is that the column editor does not move to the cell when you cancel its opening. Opening a cell in the same column expects the column editor to be in the previously opened cell, however, and this causes the error. Repro is attached to illustrate the scenario. Workarounds: - Use EditType=Cell so that each cell opens independently of the row (wokaround 1). - Use the provided function override (workaround 2). Make sure to remove it after upgrading to a release that has the fix. This function override may prevent you from getting other updates and fixes in this function. - Use a template column and hide the editor based on your condition in the OnBatchEditOpened event (workaround 3)
There are two possible approaches to overcome this issue: - First approach would be to get a reference to the GridHTMLEditorColumn and add the desired tools in the code behind using the "OnItemCreated" server event handler of RadGrid. - Second approach would be to use GridTemplateColumn with RadEditor.
Enable filtering, Enable HeaderContextMenu and HeaderContextMenuFilter. First, filter using the HeaderContextMenu filter (e.g. OrderDate GreaterThanOrEqualTo "someDate" AND OrderDate LessThanOrEqualTo "someOtherDate" Second, apply a filter on another column using the Header filter only (e.g. Freight GreaterThanOrEqualTo "4") At this point, the filtering applied by the HeaderContexFilterMenu is now partially removed. Issue only appears when Header filter and HeaderContextMenu filter are used in combination. They work as expected when used separately.
Hello, I have Radgrid with editable & non editable columns. I edit a row. If I click an editable cell, it places the cursor within the editable cell. Its correct. But if I click a readonly cell, it places the cursor in the first editable cell of the line. If the readonly cell is the last cell of the line and if I click the readonly cell, it places the cursor in the first editable cell. If the grid column width is very large, the grid is scrolled to show the first editable cell, and I loose the data which I am visualizing. If I click in readonly cell, I want to open all the editable cells of the line, but the page should remain in same place. I don't want to place the cursor in any of the editable cells of the line. Example grid: I have a simple Radgrid with batch mode and edit type row. I have 3 columns id,name and age. Id and name columns are editable columns. Age column is non editable column. If I click on age column which is non editable , the focus moves to id column, which is the first editable column. If there many columns in my grid and if I click the last non editable column, the grid scrolls to first editable column, and I lose the focus of data which I am seeing. If I click in non editable column, I want the grid to remain in same place. This feature can be added as an option by adding property of grid ForceFocusinEdit. When ForceFocusinEdit= true, if we click in readonly column, focus moves to first editable column. When ForceFocusinEdit = false, if we click in readonly column, focus is in clicked cell. Please refer to Ticket ID: 1168296 for more informations. Thank you
Images that reside in the grid will get resized (scaled down with about 3-5 %) which might cause issues, specially if exporting bar-codes, thus the bar-code scanners won't be able to read them. Current workaround is to use the Telerik Documents Processing Library and build the table manually where the images are inserted without changing the size. Here is an example: protected void RadGrid1_InfrastructureExporting(object sender, GridInfrastructureExportingEventArgs e) { Telerik.Web.UI.ExportInfrastructure.Table table = e.ExportStructure.Tables[0]; Workbook workbook = new Workbook(); workbook.Worksheets.Add(); Worksheet worksheet = workbook.ActiveWorksheet; foreach (var row in table.Rows) { if (row.Index > 1) { worksheet.Rows[row.Index - 1].SetHeight(new RowHeight(55, true)); } foreach (var cell in row.Cells) { if (row.Index == 1 || cell.ColIndex != 2) { worksheet.Cells[cell.Index.Y - 1, cell.Index.X - 1].SetValue(cell.Value.ToString()); } else { FloatingImage image = new FloatingImage(worksheet, new CellIndex(cell.Index.Y - 1, cell.Index.X - 1), 0, 0); Stream stream = File.Open(Server.MapPath(cell.Value.ToString()), FileMode.Open); using (stream) { image.ImageSource = new Telerik.Windows.Documents.Media.ImageSource(stream, "jpg"); } worksheet.Shapes.Add(image); } } } byte[] data; using (MemoryStream ms = new MemoryStream()) { XlsxFormatProvider xlsProvider = new XlsxFormatProvider(); xlsProvider.Export(workbook, ms); data = ms.ToArray(); } Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.Headers.Remove("Content-Disposition"); Response.AppendHeader("Content-Disposition", "attachment; filename=" + RadGridLista.ExportSettings.FileName + ".xlsx"); Response.BinaryWrite(data); Response.End(); }
Private
Function
SomeTable()
As
DataTable
Dim
dt
As
New
DataTable()
dt.Columns.Add(
New
DataColumn(
"FieldName"
, Type.
GetType
(
"System.String"
)))
row(
"FieldName"
) =
"C:\SomeDirectory\RadGridExport.pdf"
dt.Rows.Add(row)
Return
dt
End
Function
<
telerik:GridAttachmentColumn
DataSourceID
=
"ObjectDataSource1"
HeaderText
=
"Attachment Column"
AttachmentKeyFields
=
"FieldName"
AttachmentDataField
=
"FieldName"
DataTextField
=
"FieldName"
UniqueName
=
"FieldName"
ButtonType
=
"ImageButton"
UploadControlType
=
"RadAsyncUpload"
FileName
=
"RadGridExport.pdf"
ImageUrl
=
"pdf-icon.png"
ItemStyle-Height
=
"36px"
ItemStyle-Width
=
"36px"
>
</
telerik:GridAttachmentColumn
>
<
asp:ObjectDataSource
ID
=
"ObjectDataSource1"
runat
=
"server"
SelectMethod
=
"MySelectMethod"
TypeName
=
"MyApp"
>
<
SelectParameters
>
<
asp:Parameter
Name
=
"FieldName"
Type
=
"String"
/>
</
SelectParameters
>
</
asp:ObjectDataSource
>
Public
Class
MyApp
<DataObjectMethodAttribute(DataObjectMethodType.
Select
,
True
)>
Public
Function
MySelectMethod(filePath
As
String
)
As
DataTable
Dim
dt
As
New
DataTable(
"Base"
)
Dim
col
As
New
DataColumn(
"FieldName"
)
col.DataType = System.Type.
GetType
(
"System.Byte[]"
)
dt.Columns.Add(col)
Dim
row
As
DataRow = dt.NewRow
row(0) = My.Computer.FileSystem.ReadAllBytes(filePath)
dt.Rows.Add(row)
Return
dt
End
Function
End
Class
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
>
<
MasterTableView
>
<
Columns
>
<
telerik:GridClientDeleteColumn
CommandName
=
"Delete"
ButtonType
=
"LinkButton"
></
telerik:GridClientDeleteColumn
>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
>
<
ClientEvents
OnCommand
=
"OnCommand"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
function
OnCommand(sender, args) {
}