I have a Visual Studio 2010 web application where I have implemented reporting using VS report viewer RDLC. I have to open a new report when user clicks on a value on a column. I have implemented RDLC drillthrough report for that. Clicking on the cell --> Text box Properties --> Action--> Go to Report. On Specify a report, I have used an expression as below:
= Switch( Fields!Field1.Value="F1" , "Report1",
Fields!Field2.Value="F1" , "Report2",
)
But, my challenge is only two rows on that column should be clickable and other should not. Clicking on one value needs to open Report 1 and clicking on other value should open Report 2. On other rows I have to disable the hyperlink which I am not sure how to do.
Use jQuery to find the cell you want to disable the hyperlink
function pageLoad(){
$(document).ready( function () {
$( "a").click(function (event) {
var href = $(this ).attr('href');
if (href.indexOf("ReportOverview.aspx?" ) >= 0) {
$( this).attr('href' , 'javascript:void(0)');
$( this).removeAttr('target' );
event.preventDefault();
}
});
});
}
Related
I have a CKEditor widget with some tables with editable fields.
I need to select all the text inside the field when a user clicks it, to make changing the text faster.
For now I was able to come up with this:
editor = CKEDITOR.instances.editor1;
widget = editor.widgets.instances[0]
$.each(widget.editables, function(e) {
element = $(this.$);
element.on( 'click', function( ev ) {
elementId = editor.document.getActive().getId()
editor.getSelection().selectElement( editor.document.getById(elementId) );
});
});
Basically, I get all editable elements and bind a click event to them. My problem is only on how to select the text inside the editable element, since currently all I managed to do is select the element itself.
I need to select the text inside the element that I get when calling editor.document.getById(element) .
All other questions on StackOverflow show how to get a selection value, but I could not find anything on how to select only the text inside a node.
Using this I can display a menu by right clicking a cell:
// right click context menu
grid.onContextMenu.subscribe(function (e) {
e.preventDefault();
var cell = grid.getCellFromEvent(e);
//grid.setSelectedRows(cell.row);
$("#contextMenu")
.data("row", cell.row)
.css("top", e.pageY)
.css("left", e.pageX)
.show();
$("body").one("click", function () {
$("#contextMenu").hide();
});
});
However I would like the row to be selected, both as visual confirmation that the correct row has been right-clicked, and because some of the menu items use the selected row for their functions.
This:
grid.setSelectedRows(cell.row);
doesn't work. What is the correct way?
It might be as simple as the fact that setSelectedRows takes an array of row indexes.
Try
grid.setSelectedRows([cell.row]);
We are migrating our reports to DevExpress. The preview tool used the Esc key as default to close the print preview but using DevExpress XtraReport uses Alt + F4.
We want to keep the user experience so I need to somewhat handle a key event in that viewer form and if it's a Esc key invoke it's close event.
The preview tool in DevExpress is called ReportPrintTool. You can use ReportPrintTool.PreviewForm property or ReportPrintTool.PreviewRibbonForm property to get the preview form according to which type of menu (panel or ribbon) do you want. Both of them are Form class descendants. Now, you can just simply use Form.KeyPreview property and Form.KeyDown event to achieve the result.
Here is example:
var report = new XtraReport();
var tool = new ReportPrintTool(report);
var form = tool.PreviewRibbonForm;
form.KeyPreview = true;
form.KeyDown += (sender, e) => { if (e.KeyCode == Keys.Escape) form.Close(); };
report.ShowRibbonPreview();
I have a Tridion Date control added to a GUI Extension .aspx page I have created.
I've added this to the ASPX page with
<c:Date id="AdjustDate" runat="server"
IsSeparateFields="false" AddClearButton="false" TabIndex="3"></c:Date>
and in my .JS I've added the following to
Give me a handle onto the Tridion Date Control (to select the date values etc.)
c.AdjustDate =
$controls.getControl($("#AdjustDate"),
"Tridion.Controls.Date")
Capture changes in the date (after the user selects OK in the modaldialog)
$evt.addEventHandler(c.AdjustDate, "change",
this.getDelegate(this._onHighlightDateChange));
I capture the event and perform some updates based on the date selected.
However, my GUI extension dialog is smaller in height than when the modal dialog is shown. I'd like to resize my ASPX dialog when the user clicks Select Date and the modal dialog is presented.
I've now captured the event of the user clicking the Select Date button
c.BtnDateSelect = $controls.getControl($("#AdjustDate_selectbutton"),
"Tridion.Controls.Button");
$evt.addEventHandler(c.BtnDateSelect, "click",
this.getDelegate(this._onDateButtonClicked));
However - I can't seem to access the height of the resulting dialog as I can't add any events to tie in
the opening of the dialog itself
the user clicking OK or Cancel (to adjust the height again) or
the modal dialog being closed
Am I missing events to tie into?
I've tried to create a handle to the OK button using
BtnDateOKSelect =
$controls.getControl($("html#DatePickerPopup.popup body center div#buttonContainer div#ButtonOk.tridion"),
"Tridion.Controls.Button");
but the reference (and variations of it) return undefined - possibly as this is in an iframe so the script can't access it?
Any pointers on working out what the events are I can tie into?
How to tie into those events (and when)?
Thanks
You cannot resize a dialog (modal) after it has been open. I wrote an extension where I had a similar problem, when my date picker was over my modal dialog, It look weird, so I made my dialog date picker bigger.
However I wasn't using a date picker control, but a regular html button. Here the code:
So I retrieve button and add the handler to show the date picker:
c.BtnStartDate = $controls.getControl($("#startDate"), "Tridion.Controls.Button");
$evt.addEventHandler(c.BtnStartDate, "click", this.getDelegate(this._onStartDateButtonClicked));
This is the code in the event:
SetDateRange$_onStartDateButtonClicked(event) {
this._setDate(event, "#startDate");
};
And the setDate function:
SetDateRange.prototype._setDate = function SetDateRange$_setDate(event, controlSelector) {
var p = this.properties;
var currentDate = new Date();
var c = p.controls;
p.datePickerPopup = $popup.create(
$cme.Popups.DATE_PICKER.URL, {
width: 550,
height: 350
},
{
date: currentDate,
popupType: Tridion.Controls.Popup.Type.MODAL_IFRAME
}
);
function SetDateRange$DatePicker$onPopupCanceled(event) {
if (p.datePickerPopup) {
p.datePickerPopup.dispose();
p.datePickerPopup = null;
}
}
function SetDateRange$DatePicker$onPopupSubmitted(event) {
var value = event.data.date;
if (value) {
var value = new Date(value);
value = $localization.getFormattedDateTime(value, Tridion.Runtime.LocaleInfo.fullDateTimeFormat);
jQuery(controlSelector).trigger('setdate', [value]);
}
p.datePickerPopup.dispose();
p.datePickerPopup = null;
}
$evt.addEventHandler(p.datePickerPopup, "unload", SetDateRange$DatePicker$onPopupCanceled);
$evt.addEventHandler(p.datePickerPopup, "submit", SetDateRange$DatePicker$onPopupSubmitted);
$evt.addEventHandler(p.datePickerPopup, "close", SetDateRange$DatePicker$onPopupCanceled);
p.datePickerPopup.open();
};
Again, it might not be the solution to your scenario, but this example shows how to open the date picker dialog and use the values it returns, without using the "Tridion Date Picker Control".
Hope this helps.
I searched all over and can't seem to find the answer.
I have a MVC3 project with a WebGrid on it. The first column is a Select that is currently using the normal item.GetSelectLink to create a link to select that row.
I want this to be a checkbox instead of the test "Select". When the user hits the checkbox I want that row in the grid to be selected and the box to become "checked".
I would like the checked and unchecked states to be images that I provide.
How do I do this?
Unless you're doing something fancy with Ajax, the "select" link refreshes the page with "Selected=index" added to the query string. That would be an unusual experience, because people aren't used to checkboxes triggering a page reload.
You could do something like this, which completely mimics the "Select" link functionality. First add the checkbox to the row:
grid.Column(
format: (item) => #Html.Raw("<input class='select' type='checkbox'" + ((grid.SelectedRow == item) ? "checked" : "") + " />")
)
Then add some Javascript to handle the checkbox clicks:
var index = 1;
$("input.select").each(function () {
$(this).data('row', index);
$(this).click(function () { window.location = "?Selected=" + $(this).data('row'); });
index++;
});