C# - GridView And ObjectDataSource?
Oct 11, 2010I have a grid view that bounded to an object data source that select data from type of student
public class student
{
int id;
[code]...
I have a grid view that bounded to an object data source that select data from type of student
public class student
{
int id;
[code]...
table a
a1 a
1 qw
2 asa
i have two grid views
gridview1 has check box[a1] and one value[a](in total two columns) with objectdatasource1 for datareferencing from database
another gridview2 has to select only the selected/checked value of gridview1 of checkbox1
I'm facing a wierd problem with GridView and ObjectDataSource. I bind GridView to my business objects via ObjectDataSource. Everything was working fine until I decided to add a new field in my buisness object and wanted to add a column to GridView to show it. Somehow that column is NOT shown in the GridView's list of available columns. I have tried refreshing schema, rebinding, etc. I'm using GridView inside a user control which is used as a web part. Does that make a difference ?
View 3 Replieshow I do a sorting in a gridView with data bound by a ObjectDataSource?
View 2 RepliesWhich is the correct event to handle Updating of a row in my gridview. The gridview is bound to an objectdatasource. I added a tamplate field like this to handle editing a row:
Code:
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"> </asp:LinkButton>
</ItemTemplate>
[Code] ....
No I need to handle the Update Button click.I need to set the ObjectDatasources Update params and call the update method. I'm not sure which is the correct event to do this. IS it gridview_RowUpdating??
[code]....
Select method returns array of strings . But How I need to appear selected node for edit delete methods get this string (userName) ?
for methods like :
[DataObjectMethod(DataObjectMethodType.Delete, true)]
static public DeleteMember(...
I have a GridView, I bind it to ObjectDataSource. ObjectDataSource takes data from a database's table. Each row in table has unique ID.
I have a button in each row of GridView that should remove this row from database. My ObjectDataSource returns Object, this returned object contains ID (and some other information, like name, user etc.) however I do not show this ID on my grid.
how can I get these ID after user chooses to delete row, I need to know what I should remove.
I have a gridview being populated by an ObjectDataSource (ODS). The ODS is calling a BLL to get information from a database table. The information returned is all determined by a participantID. This works fine normally.
The issue is that I'm getting an exception thrown when the participantID isn't listed in the database table; which is possible until their information is inserted and updated on this database table. The information is entered when someone visits a webpage, their information and date/time stamp is inserted/updated to this table, but not until then.
Do I edit my ODS or the BLL to check for a null return and handle this exception? How would I do this as well?
[Code]....
[Code]....
I have a grid that receives products over a GetList methods via ObjectDataSource. The Product class contains also a Object Supplier. If I change in the drop down list of the grid the supplier for a product and I click update the ID of the suppliier is still the same. I have debugged the call of the update method and checked the parameter in the product object. I wrote the following code in the SelectedIndexChanged event and the text box shows the right id but not the update method.
DropDownList supplier = (DropDownList) sender;
txtTest.Text = supplier.SelectedValue;
Here is the code of my grid view:
[Code]....
My Object Data Source calls the following Update Method:
[Code]....
The next work around idea would be to call the update method manually in the Update Event of the grid view.
Backgroud: I'm using NHibernate for my model layer, and I have a HTTP module taking care of instantiating the session at the beginning of each request and cleaning it up at the end of each request (i.e. Session Per Request). In this case, I have two object types:
ParentItem - an object with a bunch of properties and a collection of ChildItems. ChildItem - an object with properties including a DateTime (EffectiveDate) and an unenforced FK pointing to a completely different database. The ChildItem class contains a reference back to the parent as well (many-to-one) While the ParentItem has multiple ChildItems in its collection, I'm only generally interested in the latest ChildItem in the collection.
Desire: Want a databound control (GridView or ListView, I don't care which) that allows me to Add/Edit/Delete ParentItems from my datasource. I also want to have the ability to set a new "latest" ChildItem as part of the edit/update.
Issue: I can't seem to access the underlying DataItem from the GridView/ListView in the OnItemUpdating handler (which isn't unexpected, since the data is now in the viewstate). What I thought I could do would be to load a ParentItem from my session using the ID from the databound control, create a new ChildItem, add it to the ParentItem, and then save the ParentItem. Since NHibernate caches the data, the load should give me a copy from cache (no roundtrip to the DB) and I'd either be doing this before the ParentItem was saved back (thus no changes committed to ParentItem, just to ChildItem) or after (thus the cached version is still the same, and my new object will match the updated version). What I get when I do this (for ParentItemID=1):
a different object with the same identifier value was already associated with the session: 1, of entity:
NameSpace.ParentItem
on the line:
Session.SaveOrUpdate(parentItemInstance);
Can you post of an example of Gridview with EditItemTemplate using ObjectDataSource as data connectionand Update the the specific row. Ihave lots of sleepness night with this problem.
View 2 RepliesI've been working a gridview that uses an ObjectDataSource to perform either select, insert, delete or update. I was able to get everything to work correctly with the GridView except when it came to performing an update. My first issue that I came across was that it was tacking on two extra columns or fields that I didn't really expect. The function being called (SavePipelineUser) only expected 4 parameters and was getting 6 in total. This was occuring even though I had placed OldValuesParameterFormatString="original_{0}" or OldValuesParameterFormatString="{0}" within the GridView's attributes.
Ok, So I was able to resolve this issue by going into the OnUpdating event in the ObjectDataSource and doing the following below. This effectively removes the additional parameters from being added. However, I now have a new problem. There doesn't appear to be any values actually being passed into this method. So, while no errors appear, nothing gets updated. Can anyone explain to me why my values are not being carried forward? I've spent about a day and a half working on this issue and was able to get around this by just going with the GridView's RowUpdating event and grabbing values from grid to manually get it to update. While I'm very happy for anything to be working after so much time, I still feel like this is a bad hack for this to work. I have a hard time fathoming why this seemingly simple use of the GridView on my part has turned out to be very complicated. I'm extremely leary now of using the ObjectDataSource object for anything if it's going to be this much of an effort.
<!--html code-->
<asp:GridView ID="gvPipelineUsers" runat="server" AllowPaging="True"
AllowSorting="True" DataSourceID="objCommon" AutoGenerateColumns="False" ShowFooter="True"
[code]...
This is not my solution. I actually compiled it here with proper example. So I don't take any credit for the solution. In the past I have used GridView to insert recordsbut not using ObjectDataSource. Mostly I did it by catching RowCommand event of GridView and call the appropriate function. This time I was adamant using ObjectDataSource to Insert in Gridview. GridView doesn't support Insert so it does not actually instantiate OBjectDataSourceView automatically for Insert operation
So here is the soloution, catch the RowCommand event of gridview, get the ObjectDataSourceView, create orderedDictionary, add entries to ordered dictionary, call insert function of ObjectDataSourceView instead of ObjectDataSource. Here is the RowCommand event of the gridview
[Code]....
Here is the ObjectDataSource
[Code]....
Here is the business object class
[Code]....
Here is the object class
[Code]....
I'm using a GridView with an ObejctDataSource. The data is provided by a business object and not a DB. It returns a list of people and each person belongs to a group. Now I need to filter data. For example, I need to return list of people in specific groups. How can I specify a list of groups to be able to filter the data ? Could I use SQL like syntax ? I understand the filter expression works only when data is returned as a datatable. But in my business object I maintain data as hashtables and return as List<PeopleInfo>. Do I need to return list as datatable instead ?
View 2 RepliesI have a gridview with the ObjectDataSource and the Update does not work. When I click on Edit, I go to Edit mode but Update will not work at all. No errors. I do believe that it is in the RowUpdating method but cannot figure out how to call the method UpdateBook from the BookManager BAL.
BAL BookManager
[Code]....
Gridview
[Code]....
RowUpdating
[Code]....
Put in Breakpoints and it is getting to the RowUpdating but will not update.
I get the following error when trying to delete a row in a gridview. The error is strange, since I dont pass 2 parameters as far as I can see.This is the error and the code is below:
Server Error in '/' Application.
ObjectDataSource 'odsRooms' could not find a non-generic method 'DeleteRoom' that has parameters: id, locationid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: ObjectDataSource 'odsRooms' could not find a non-generic method 'DeleteRoom' that has parameters: id, locationid.
Source Error: [Code]....
Stack Trace: [Code]....
[InvalidOperationException: ObjectDataSource 'odsRooms' could not find a non-generic method 'DeleteRoom' that has parameters: id, locationid.]
System.Web.UI.WebControls.ObjectDataSourceView.GetResolvedMethodData(Type type, String methodName, IDictionary allParameters,[code]....
I have a gridview databound to an objectdatasource. Everything worked great until I changed 2 columns from asp:BoundField to asp:TemplateField. These are the UPC column and the Part column. I wanted to show a link button for each of these fields that take the user to another page. Now asp.net expects these two fields to be parameters on the update store procedure. Why is this? How do I get it to not assume these columns need to be passed to the store procedure?
Here is the code for the grid view:
[code]....
I have a gridview being data bound by an objectdatasource which points to a BLL/DAL. I have paging and sorting enabled within the gridview. I have the fields configured in the look/fell I want from a templatefield. This templatefield has the sort expression (date) I want things to be sorted by. All this works as it should and I have no issues with it.But, the issue is that when I click on the header to sort asc/desc by date, I have to click on it twice for it switch to descending order. E.g. I hit the webpage and it lists all the information in the gridview, sorted by date, ascending order. If I want to sort by descending order, I have to click the date header twice in order for the gridview to sort the information in descending order; the clicks cause a post-back and the whole screen is refreshed.
View 2 RepliesI am having some difficulty enabling sorting on a gridview that has data in it that has come from an objectdatasource.
The AllowSorting="True" function doesnt work for ObjectDataSource so I need to find a work around...I am guessing that I will need to do something in code in order to get this off the ground.
I have an ObjectDataSource giving me data similar to: OrderNumber OrderDate OrderValue OrderItems The first three are simple data types and the last has multiple occurrences of another class: OrderLineNumber OrderItem OrderQuantity The ObjectDataSource will only contain one row (which might make things simpler). So, there will be one OrderNumber, OrderDate and OrderValue; and then several occurrences of OrderItems (each containing OrderLineNumber, OrderItem and OrderQuantity).
I am displaying OrderNumber, OrderDate and OrderValue in the FormView - that work's fine, as expected. I have placed a GridView within the FormView and am failing miserably to get it to bind to OrderItems. I have tried the obvious things like specifying "odsWhatever.OrderItems" as the DataSourceID for the GridView, but to no avail.
I am using ObjectDataSource controll to bind gridview and using custom paging. Everything working fine but the problem arises when last page contains only one record and i try to delete it-- gridview disappear.
Below is ObjectDataSource declaration..It is working fine..only problem is with deleting from last
page which is containing only single record.
<asp:ObjectDataSource ID="ODS1" runat="server"
TypeName="MyClass"
SelectCountMethod="GetDataCount"
SelectMethod="BindData"
DeleteMethod="DeleteData"
EnablePaging="true"
StartRowIndexParameterName="StartRowIndex"
MaximumRowsParameterName="MaxRowCount"
>
<DeleteParameters>
<asp:Parameter Name="ID" DbType="int" />
</DeleteParameters>
</asp:ObjectDataSource>
i have been following the asp.net data access tutorials on this site. When i try to update, nothing happens. I believe the problem lies with my wrong coding on the BLL part. I'm using table adapters. Could anyone point out what iswrong with my code or tell my what the correct code is?
[Code]....
I have a data object where one of the properties is a collection of another data object. I never really figured out how to map this to a GridView, but I came up with a workaround. Now I am stuck and cannot figure out any way to do this in a ReportViewer.
Here is how I solved the GridView issue:
Say we have these objects:
public class BoysWithToys : List<BoyWithToy>
{
}
public class BoyWithToy
{
string FirstName { get; set; }
string LastName { get; set; }
int BoyNumber { get; set; }
List<Toy> FavoriteToys { get; set; }
}
public class Toy
{
int BoyNumber { get; set; }
string Toy { get; set; }
}
What I wanted to do was to map BoysWithToys to the GridView and present one GridView row per BoyWithToy record. Where there was more than one FavoriteToys record I wanted to list them in a bulleted list in the FavoriteToys column. I accomplished this by calling RowDataBound() for the GridView, casting the e.Row.DataItem to BoyWithToy, then looping through all of the FavoriteToys and adding each Toy to a bulleted list, then setting the column's text to that list.
I have no idea how to accomplish anything similar in ReportViewer. If I simply drag the BoysWithToys DataSource to the designer and run it, the FavoriteToys column shows '#Error'.
VS2010 Ultimate ASP.NET 4.0 Web Appliction project
I have a simple aspx page with a GridView Bound to an ObjectDataSource utilizing a class object that returns a DataView.
There are no errors generated, but the GridView does not display any rows. If I check the return value of the ObjectDataSource in the Selected event in the Immediate window (?CType(e.ReturnValue,DataView).Count), there are 51 rows. However, (?Me.GridView1.Rows.Count) shows 0 rows. The exact same page in VS2008, ASP.NET 3.5 works fine. how to get the GridView to display the rows? What has been done to the GridView in 4.0?
Page and code below -
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm2.aspx.vb" Inherits=".WebForm2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
[Code]....
I'm trying to bind both GridView and DetailsView to a single ObjectDataSource declaratively (in markup). I'm getting the error read as below when I tried to run it.
"The DataSourceID of 'DetailsView1' must be the ID of a control of type IDataSource. A control with ID 'ReservationsDataSource' could not be found."
It works when I bind GridView and DetailsView each seperately to my ObjectDataSource. Is it I can't bind two pagable data web controls to a single datasource?? or there is a trick needed to be done for this to work.
FYI, I'm trying to create a Master/DetailsView of my data. DetailsView of my application should show the record selected in GridView and it should be editable.