Delete Button with image - asp.net-mvc

I implemented a demo using a GridView in DevExpress for MVC.
I want to set an image for Delete Button in my GridViewPartial View.
Someone knows how can I set it?
#{
var grid = Html.DevExpress().GridView(settings => {
...
settings.CommandColumn.Visible = true;
settings.CommandColumn.ShowNewButton = true;
settings.CommandColumn.ShowEditButton = true;
...
});
if (ViewData["EditError"] != null){
grid.SetEditErrorText((string)ViewData["EditError"]);
}
}
#grid.Bind(Model).GetHtml()
Thanks Mates.
EDITED:
Trying this
settings.SettingsCommandButton.DeleteButton.ButtonType = GridCommandButtonSettings.Image;
settings.SettingsCommandButton.DeleteButton.Image.Url = "~/content/images/icons/icon_delete.png";
It returns "Is needed a reference, method or property non statics "DevExpress.Web.GridCommandButtonSettings.Image.get""

Slight update for newer versions of DevExpress. ButtonType has been deprecated in favor of Render Mode.
New
settings.SettingsCommandButton.RenderMode = GridCommandButtonRenderMode.Image;
settings.SettingsCommandButton.DeleteButton.Image.Url = "~/Content/Images/next.png";
Obsolete
settings.SettingsCommandButton.DeleteButton.ButtonType = GridCommandButtonRenderMode.Image;

Did it,
In Razor View (probably you are using GridViewPartial) define the button through:
settings.SettingsCommandButton.DeleteButton.ButtonType = GridCommandButtonRenderMode.Image;
settings.SettingsCommandButton.DeleteButton.Image.Url = "~/Content/Images/next.png";

Related

Display contact address in ios using xamarin

absolute beginner with xamarin.
Followed the following tutorial to try and simply click a button to display the contact list, select a contact, and then to display firstname, surname, and address on the screen.
https://github.com/xamarin/recipes/tree/master/Recipes/ios/shared_resources/contacts/choose_a_contact
Managed to get the firstname and surname to be displayed, but cannot get the address. Constantly getting the error
Foundation.MonoTouchException: Objective-C exception thrown. Name: CNPropertyNotFetchedException Reason: A property was not requested when contact was fetched.
On the
contanct.PostalAddresses
This is the snippet of code:-
partial void UIButton197_TouchUpInside(UIButton sender)
{
// Create a new picker
var picker = new CNContactPickerViewController();
// Select property to pick
picker.DisplayedPropertyKeys = new NSString[] { CNContactKey.GivenName, CNContactKey.FamilyName, CNContactKey.PostalAddresses };
// Respond to selection
var pickerDelegate = new ContactPickerDelegate();
picker.Delegate = pickerDelegate;
pickerDelegate.SelectionCanceled += () => {
SelectedContact1.Text = "";
};
pickerDelegate.ContactSelected += (contact) => {
SelectedContact1.Text = contact.GivenName;
SelectedContact2.Text = contact.FamilyName;
SelectedContact3.Text = contact.PostalAddresses
};
pickerDelegate.ContactPropertySelected += (property) => {
SelectedContact1.Text = property.Value.ToString();
};
// Display picker
PresentViewController(picker, true, null);
}
Am i missing something?
Seem to have resolved this if anyone else is having a similar issue.
The solution was to completely close down visual studio on the mac and re-open it.
Originally, i was stopping the project, and re-building. Possibly a bug, but non of my changes where being picked up.
A simple re-start kicked it back in

"CS0162: Warning as Error: Unreachable code detected" on Razor View

I have the following code within a script tag on my razor view:
self.regions = [];
#foreach(var region in Model.OperationRegions)
{
<text>
self.regions.push({
regionid: '#region.Region_Id',
regionname: '#region.Title',
selected: ko.observable(#(Model.RegionsList.Contains(region.Region_Id).ToString().ToLower()))
});
</text>
}
self.categories = [];
#foreach(var category in Model.Categories)
{
<text>
self.categories.push({
categoryid: '#category.Category_Id',
title: '#category.Title'
});
</text>
}
For clarity, the code outside of the foreach loops and within the text tags are Javascript and the purpose of the razor code is to populate my Javascript arrays with data from the server.
When I run this I am currently getting a server error saying "CS0162: Warning as Error: Unreachable code detected"
The error is thrown on the second "foreach" in the snippet.
Surprisingly I couldn't find another question referring to this error message on an MVC razor page so I'm posting this here.
My question is why is that line of code considered to be unreachable? I will update this question if I find anything else on my page to be relevant to the issue as I try to debug.
The error has disappeared now. I had renamed a property of my model and not recompiled before trying to load the page again. Recompiling made the error go away. I have no idea how the root cause translated to the error message shown but its fixed now in any case.
This is an extremely poor way to handle this. There's no need to build an array piece by piece like this. Just convert your list to JSON.
self.regions = #Html.Raw(Json.Encode(Model.OperationRegions.Select(region => new {
regionid = region.Region_Id,
regionname = region.Title,
selected = Model.RegionsList.Contains(region.Region_Id)
})));
The only thing this can't handle is making selected an observable. However, you can simply loop through the array and fix this:
for (var i = 0; i < self.regions.length; i++) {
self.regions[i].selected = ko.observable(self.regions[i].selected);
}
However, the better approach is to use another view model:
var OperationRegionViewModel = function (data) {
var self = {};
self.regionid = ko.observable(data.regionid);
self.regionname = ko.observable(data.regionname);
self.selected = ko.observable(data.selected);
return self;
};
Then, you can just do something like:
var regions = #Html.Raw(Json.Encode(Model.OperationRegions.Select(region => new {
regionid = region.Region_Id,
regionname = region.Title,
selected = Model.RegionsList.Contains(region.Region_Id)
})));
self.regions = $.map(regions, new OperationRegionViewModel);
Or, even better build your JSON all at once:
var json = #Html.Raw(Json.Encode(new {
regions = Model.OperationRegions.Select(r => new { ... }),
categories = Model.Categories.Select(c => new { ... }),
// etc
});
Then, inject this all into your view model:
var viewModel = (function (json) {
// other stuff
self.regions = $.map(json.regions, new OperationRegionViewModel);
self.categories = $.map(json.categories, new CategoryViewModel);
// etc
})(json);

How we can show "No Data Available" message in RDLC Reports via Resources files

How we can show "No Data Available" message in RDLC Reports via Resources files if no data is found. Currently we are reflecting message from NoRowsMessage property for a table, matrix, or list
(https://technet.microsoft.com/en-us/library/cc645968.aspx).
But we want to show it via Resource files and C# code rather then setting it from Properties of Table. Can anyone please assist. The code (Page_Load) of our control page (.ascx)is mentioned below:
private void Page_Load(object sender, EventArgs e)
{
var presenter = (ReportPresenter)Model;
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.Visible = true;
var rdlcPath = "~/ReportsRDLC/EmployeeData.rdlc";
if(presenter.ReportFilter.GroupOption == Resources.Date)
{
rdlcPath = "~/ReportsRDLC/EmployeeDatebyDate.rdlc";
}
groupOption.SelectedValue = presenter.ReportFilter.GroupOption;
const string DataSetName = "EmployeeDataSet";
reportViewer.LocalReport.ReportPath = HttpContext.Current.Server.MapPath(rdlcPath);
var dataSource = new ReportDataSource(DataSetName, presenter.EmployeeDetails);
reportViewer.AsyncRendering = false;
reportViewer.SizeToReportContent = true;
reportViewer.ShowPrintButton = false;
reportViewer.ShowRefreshButton = false;
reportViewer.ShowToolBar = true;
reportViewer.Height = 600;
reportViewer.Width = 400;
reportViewer.ShowPageNavigationControls = false;
reportViewer.ShowFindControls = false;
reportViewer.ShowZoomControl = false;
reportViewer.LocalReport.DataSources.Add(dataSource);
}
Perhaps you could send the message as a parameter.
You can tell if the report will be empty depending if presenter.EmployeeDetails is empty.
ReportParameter[] myParameters = new ReportParameter[1];
myParameters[0] = new ReportParameter("pEmptyMessage", presenter.EmployeeDetails.Any() ? "No Data Available" : string.Empty);
reportViewer.LocalReport.SetParameters(myParameters);
On your report you can then display this message as you please, using the parameter. You can even place it in a textbox and decide whether to display it based on the value.
I hope this is of use to you.
Edit: I forgot to mention that you should add the report parameter with the correct name to your reporter:
In the reporter you can then use the parameter as followed : [#pEmptyMessage]
=Parameters!pEmptyMessage.Value

IllegalStateException while adding vertical field manager in another manager

I am trying to add a list in a VerticalFieldManager and then that manager to another VerticalFieldManager. I am using it in custom tabs.First time when application starts it runs fine but when I switch to another tab and return to same it gives IllegalStateException.
I tried it in many ways but not getting what is causing the exception in adding that VerticalFieldManager.
I am using the code :
//HEADER
_bitmap = EncodedImage.getEncodedImageResource("Friends.png");
friendsBmp = new BitmapField(Constants.sizePic(_bitmap, _bitmap.getHeight(), _bitmap.getWidth()));
//add(WebBitmapField.getUrlHFM());
SCREEN_FLAG = Constants.FRIENDS_FLAG ;
//FRIENDS' UPPER TAB
friendsTabHFM =new HorizontalFieldManager();
Bitmap ConnectedUser_normal_Bmp =Constants.sizePic(EncodedImage.
getEncodedImageResource("connected_user_normal.png"),40, Display.getWidth()/2); //Bitmap.getBitmapResource("connected_user_normal.png");
Bitmap search_normal_Bmp = Constants.sizePic(EncodedImage.
getEncodedImageResource("search_normal.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_normal.png");
Bitmap ConnectedUser_tap_Bmp = Constants.sizePic(EncodedImage.
getEncodedImageResource("connected_user_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("connected_user_tap.png");
Bitmap search_tap_Bmp = Constants.sizePic(EncodedImage.
getEncodedImageResource("search_tap.png"),40, Display.getWidth()/2);//Bitmap.getBitmapResource("search_tap.png");
connectedUsersTab= new CustomButtonField(ConnectedUser_normal_Bmp.getWidth(), "", ConnectedUser_normal_Bmp, ConnectedUser_tap_Bmp, ButtonField.FIELD_HCENTER );
connectedUsersTab.setChangeListener(this);
searchTab = new CustomButtonField(search_normal_Bmp.getWidth(), "", search_normal_Bmp, search_tap_Bmp, ButtonField.FIELD_RIGHT);
searchTab.setChangeListener(this);
friendsTabHFM.add(connectedUsersTab);
friendsTabHFM.add(searchTab);
if(Constants.isGetConnectedFriends){
Constants.isGetConnectedFriends =false ;
if(friendsVFM.getFieldCount()!= 0){
friendsVFM.deleteAll();
}
//GET CONNECTED FRIENDS WEB SERVICE CALL
GetConnectedFriendsInterMediater getConnectedFriendsInterMediater = new GetConnectedFriendsInterMediater(WebServiceDetails.METHOD_GET_CONNECTED_USER, Jxa.loginUserName);
PleaseWaitPopupScreen.showScreenAndWait(getConnectedFriendsInterMediater, Constants.PLEASE_WAIT_TEXT);
}else if(Constants.isGetUserByUsername){
//Constants.isGetUserByUsername = false ;
GetUserByUsernameIntermediator getUserListIntermediator=new GetUserByUsernameIntermediator(Jxa.loginUserName ,SearchUserScreen.userName);
PleaseWaitPopupScreen.showScreenAndWait(getUserListIntermediator, Constants.PLEASE_WAIT_TEXT);
}else if(Constants.isGetAllUser){
Constants.isGetAllUser = false ;
GetAllUserListIntermediator getAllUserListIntermediator=new GetAllUserListIntermediator(WebServiceDetails.METHOD_FIND_USERS,SearchUserScreen._ageRange,SearchUserScreen._status,SearchUserScreen._religion,String.valueOf(SearchUserScreen._page) ,Jxa.loginUserName);
PleaseWaitPopupScreen.showScreenAndWait(getAllUserListIntermediator, Constants.PLEASE_WAIT_TEXT);
}
if(_mainScreenVFM.getFieldCount()!=0){
_mainScreenVFM.deleteAll();
}
_mainScreenVFM.add(friendsTabHFM);
_mainScreenVFM.add(friendsVFM);
These code is for a tab in which two sub-tabs are there.For sub tabs it is running fine but for not for main tab.
One more scenario is there,when GetConnectedFriendsInterMediater is called in that I am adding the list in friendsVFM which creating the exception.
Code for that is:
GetConnectedFriendsWebService getFriendsWebService = new GetConnectedFriendsWebService(method ,userName);
Vector friendsVecList= getFriendsWebService.getFriends();
Constants.connectedUsersVector = friendsVecList ;
synchronized (UiApplication.getEventLock()) {
if(TabControlScreen.friendsVFM.getFieldCount()!=0){
TabControlScreen.friendsVFM.deleteAll();
}
TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList)); //HERE LIST IS ADDED
}
I have resolved the problem ,when I was switching the tab ,I was not creating new instance for friendsVFM and using the same instance which was causing the exception at that time.Now ,same exception is thrown when I am trying to add buddyList in _listVFM . I know it is due to adding the buddyList again which is already added.Is there any solution so that I can add the list without exception. Code for that:
//CREATING SINGLETON REFERENCE OF THE BUDDYLIST SCREEN
public static ConnectedFriends getInstance(BuddyListField buddyListField){
if(connectedFriends==null){
connectedFriends = new ConnectedFriends(buddyListField);
}
return connectedFriends;
}
public ConnectedFriends(BuddyListField buddyListField) {
if(_listVFM!=null){
_listVFM.deleteAll();
}
_listVFM = new VerticalFieldManager();
_listVFM.add(buddyListField);//HERE IS EXCEPTION ,BUT WANT TO ADD THE LIST //SECOND TIME TOO
}
When I am returning from another tab to sam tab it throws exception or in other words I am not able to add the list.
Illegal state exception occurs when you're trying to add fields twice as suggested by Signare also. I guess you should try this first:
friendsVFM.getManager().delete(friendsVFM);
I solved it by using getManager() on buddyList and removing that.Than again I added it as per requirement and it worked.Code for this :
if(ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager()!= null){
ConnectedFriends.getInstance(KingdomConnectMain.buddyList).getManager().delete(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));
}
TabControlScreen.friendsVFM.add(ConnectedFriends.getInstance(KingdomConnectMain.buddyList));
This code is used while calling GetConnectedFriendsWebService in the second part of codes.

display image devexpress gridview, is this a rocket science?

Let say I have ViewModel which I use in devexpress gridview. Inside that view I display my data in devexpress gridview like this
#Html.DevExpress().GridView(
settings =>
{
settings.Name = "myGridView";
settings.KeyFieldName = "Id";
....
var column = settings.Columns.Add("Id", "Id");
column = settings.Columns.Add("Title", "MyTitle");
...
}).Bind(Model).GetHtml()
My Model is of IEnumerable
and everything is ok with this code up.
Now I want to display image inside that gridview before or after Id column.
So I found that this should be done with Html.DevExpress().BinaryImage()
But I'm stuck here for a while now.
First to describe my viewmodel and how my images are stored.
My Model have List<Photo> collection. I'm getting images as FileContentResult.
So I know I should use this Html.DevExpress().BinaryImage() but I dont know.
Here is example which I should follow.
column = settings.Columns.Add("", "Photos");
Html.DevExpress().BinaryImage(
imageSettings =>
{
//imageSettings.Name = "Photo";
imageSettings.Width = 100;
imageSettings.Height = 100;
})
.Bind(((System.Data.Linq.Binary)DataBinder.Eval(Model, "Photo")).ToArray())
.Render();
Update:
I think I should try with this solution. Problem here is that I want to display in my grid first image from the Photos collection. I tried with with code below but with no luck. No errors.
var photoColumn = settings.Columns.Add("Photos[0].ImageData", "Foto");
photoColumn.Visible = true;
photoColumn.Width = 20;
photoColumn.FieldName = "Photo.ImageData";
photoColumn.ColumnType = MVCxGridViewColumnType.BinaryImage;
DevExpress.Web.ASPxEditors.BinaryImageEditProperties properties = (DevExpress.Web.ASPxEditors.BinaryImageEditProperties)photoColumn.PropertiesEdit;
properties.ImageHeight = 50;
properties.ImageWidth = 50;
You do not need to use BinaryImage within the GridView directly, because MVCxGridViewColumnType supports BinaryImage.
Related link - GridView - How to load binary image within BinaryImage column
Please, also review the Grid View - Templates demo that demonstrates how to use the BinaryImage within the data rows.
In you case it is necessary to customize DataItemTemplate and customize BinaryImage inside it as follows:
settings.Columns.Add(column => {
column.SetDataItemTemplateContent(c => {
Html.DevExpress().BinaryImage(
imageSettings => {
imageSettings.Name = "Photo" + c.KeyValue;
imageSettings.Width = 50;
imageSettings.Height = 50;
})
.Bind(Here_Your_Code_To_Retrieve_Image_From_Current_DataItem)
.Render();
});
});
Here is one that worked for me.
settings.Columns.Add(column =>
{
column.SetDataItemTemplateContent(c =>
{
Html.DevExpress().BinaryImage(
imageSettings =>
{
imageSettings.Name = "PhotographOfCommodity" + c.KeyValue;
imageSettings.Width = 50;
imageSettings.Height = 50;
})
.Bind(DataBinder.Eval(c.DataItem, "PhotographOfCommodity")).Render();
});
});
HOPE THIS HELPS

Resources