C# - Add WhereParameters To LinqDataSource In Selecting Event?
Mar 19, 2010
I have a repeater using a LinqDataSource as a data source. When a query string is entered, I'd like to filter the results, but ONLY when a query string is entered. If there is no query string, the results should not be filtered, all results should be returned.
I'm trying to add a WhereParameter to my LinqDataSource in the Selecting event of the LinqDataSource, but it's not working. Here's my code:
In my web app, I used LinqDataSource, ListView and DataPager (.NET 3.5 sp1) to implement search feature with paging. I have a button to trigger the search.
But In the first time, the Selecting event of LinqDataSource fire twice and I don't know why (I debugged my code very carefully). I don't use QueryString with DataPager and assign PageSize of DataPager in the first time of page load to prevent the ListView bind again (as in some instructions I found in forum)
in the selected event it seems even though e.TotalRowCount really is the total row count, when I cast e.Result to a type in order to access the actual data only the current page of data is there? not all.
items only has the 15 records for the current gridView page, not all the records, is this normal? If I need to access all the items in the result do I need to stick with the selecting event instead?
How do I handle using e.Result when my datasource was shaped (select new{})? example aspx markup below:
[Code]....
1) since I shaped, it's an anonymous type right? so what do I cast e.Result to in order to be able to get at the data? 2) I am thinking of using the selected event to handle some conditional page setup based on whether or not any results were actually found from the main query (the one that is used to bind data to a gridView via this linqdatasource control)... so I need to check for count > 0 and if it is, I need to fill a few dropdown controls based on a few new queries
I have an EntityDataSource and I need set WHERE to a Local Variable Type: GUID.
My problem is I am not able to send my local variable Guid to EntityDataSource for a WHERE OPERATION.
I also tried to to use a ControlParameter<asp:ControlParameter Name="UserId" /> and have a Label with Text property on my Guid converted in String. But does not work.
I'm having an issue coming up with an appropriate code design to implement a search page using linq to sql for my DDL. I think the best way for me to explain where I'm at is describing what I've done in the past, before linq. Lets say we have a basic search page with various user input controls for search options... for simplicity, let's say there are two main ways the user can search. 1. a dropdown filled with account numbers. When that drop down is changed and an account number is selected, a gridview needs to be populated with all the records for that account. 2. the second way is a dropdown for choosing what field you want to search, a textbox for entering what you want to search for, and a button to execute that search. In the past, just using straight ado.net
I would handle each of these two search options separately within the events of the dropdown list and the button, respectively. In selectedIndexChanged for 1, and in the buttonClick event for 2, I would construct my sqlCommand etc., ultimately returning a dataset or datatable which I would then bind to the gridview. The logic was separated by the two different event handlers. Now, fast forward to linq to sql and I have a similar page layout, but I am using the linqdatasource selecting event to build my where conditions. Now the difference is *everything*, all the logic, is now in this one event handler, which search option did the user run? Could I somehow craft an IQueryable <T> within each of the input controls event handlers (like the button click, or selectedIndexChanged of the dropdown) and pass that in to the linqdatasource's selecting event? that way my logic stays logically separated...
further, after this initial search is done and results are bound to a gridview, I have several other dropdown lists that appear for search refinement. I need to keep track of that top level query, and each of the refinements... and again, right now it looks like everything is going into the linqdatasource selecting event and I get the feeling it shouldn't be... using the selecting event enables my paging and sorting to work, so I want to use that, but again, it's turning out that I'm putting *everything* there, like all the page's logic, and I'm thinking that is not good? if I could just pass in the actually query, like an IQueryable<T>, and keep my logic separated.
I'm trying to construct one of my SQL query parameters by building a string inside the DataSource selecting event. This string will be grabbing information from various controls on the page (2 drop down menus and 1 calendar date selector). However, I found that stringbuilder doesn't work inside a selecting event. Is that normal or do I have another hidden problem??
Here is the error I'm getting:
System.Data.SqlClient.SqlException: Procedure 'spProcedure2' expects parameter '@sqlSelect', which was not supplied.
how can I use a "where clause" in the below stored procedure to retrieve columns and display in gridview? I have three textboxes on the form. One is for user to enter "regno" to retrieve record for a particular students, the remaining two textboxes are for "from date" and "to date" respectively so that user can select from date and to date from two calendar controls I have on the form. On selection date appears in the two textboxes so that records can be retrieved based on the selected date.
CREATE PROCEDURE [dbo].[GetAttendanceByHours] AS BEGIN
Select *,ISNULL(NO_HRS_PRESENT,0)*100/ ((ISNULL(NO_HRS_PRESENT,0))+(ISNULL(NO_HRS_ABSNT,0))) PRSNT_PERC,ISNULL(NO_HRS_ABSNT,0)*100/ ((ISNULL(NO_HRS_PRESENT,0))+(ISNULL(NO_HRS_ABSNT,0))) ABSNT_PERCfrom(selectREGNO,FIRSTNAME,LASTNAME,MAX(case when status = 'P' THEN CNT end) NO_HRS_PRESENT,MAX(case WHEN STATUS = 'A' THEN CNT END) NO_HRS_ABSNT from(selectREGNO,FIRSTNAME, LASTNAME,status,count(status) CNT from AttendanceTablegroup by regno,firstname, lastname, status ) AGROUP BY regno,firstname, lastname) tmpEND
The second one references the first one, that is each order is assigned to the client. Now suppose I have an .aspx page with a LinqDataSource for Orders table, and a GridView that uses this datasource and displays a table with a following columns:
Order name. Order desc. Client name. Client address.
As far as I understand, the Linq to SQL is designed in such a way, that by default it does not load any associated entities, it only does it when a child property is requested. So, when a page is loaded, the following situation will occur:
First query will retrieve the records from the Orders table. For each row displayed by GridView an additional query will be performed when one of the client properties is requested. Therefore, if we have 100 orders, this means will perform 101 queries instead of one (or even maybe 201, if a query will be performed for each client property)? How to avoid this and make LinqDataSource load all the required fields by a single query? Right now I see the only workaround for this problem - use an SqlDataSource with a join query, that will retrieve all required fields at once.
<asp:LinqDataSource ID="LinqDataSource3" runat="server" OnSelecting="LinqDataSource3_OnSelecting"> </asp:LinqDataSource> And I have ASPxGridView <dxwgv:ASPxGridView ID="ASPxGridView2" ClientInstanceName="ASPxGridView2Client" runat="server" AutoGenerateColumns="False" DataSourceID="LinqDataSource3"> </dxwgv:ASPxGridView>
In this way Im able to add columns dynamically while handling onSelecting event:
protected void LinqDataSource3_OnSelecting(object sender, LinqDataSourceSelectEventArgs e) { MyModelDataContext context = new MyModelDataContext(); ASPxGridView grid = ASPxPageControl1.TabPages[3].FindControl("ASPxGridView2") as ASPxGridView; if(grid.Columns.Count == 0){ GridViewDataTextColumn txtColumn1 = new GridViewDataTextColumn(); GridViewDataTextColumn txtColumn2 = new GridViewDataTextColumn(); txtColumn1.FieldName = "UserId"; txtColumn2.FieldName = "FirstName"; grid.Columns.Add(txtColumn1); grid.Columns.Add(txtColumn2); } e.Result = from u in context.Users select new { UserId = u.UserId, FirstName = u.FirstName }; }
It is all made simply to test cause my idea is to have solution that makes it possible to use inqDataSource as a datasource for de ASPxGridView but join 2 or 3 tables and show results in this grid.
What I want to ask is if its good solution or is there any other better way to present some views made from couple of tables by join?
Second question is that I have Users and Group and I would like to have one table in which I would have two columns Name and Type For groups type would by group and for users type would be user. I dont have such a table in my database Is it possible to create specific class. Create List of objects of that class and fill it using linq query and the use it as linq data source for that grid ?
clas would be:
pseudocode:
Class MyClass { string Type; string Name; }
or is there any other way to create such a table ?
Im trying to build a where clause in c# for a LinqDataSource, but I cant get it to work, heres my code
[Code]....
when I set category to 'Concerts' tyhe where clause is
'Category = Concerts'
this generates an error telling me there is no column called 'Concerts'. I assume I somehow have to enclose the search term in quotes, Ive tried single and double quotes, but nothing works.
So I need to take the literal "SELECT....FROM Bay....WHERE Warehouse=1 and ((BAY LIKE '1.0%' or BAY LIKE '2.0%'))I have set up a linqdatasource on my asp page and I want to bind that to a gridview. Here is the start of the HTML:
ViewState is active and I have a RadioButtonList with DataSourceID to LinqDataSource.If I postback and cause event SelectedIndexChanged, I can read the SelectedValue property, but if the postback is caused by another control, SelectedValue its always empty...Note if I turn ViewState off, works fine, SelectedValue has always a non empty string...
I have a Listview that I want to read the results of a Stored procedure. I have created the DBML object with the table and the stored procedure. When I configure my LinqDataSource on the page I cannot specify the SProc - only the Table. Or do I need to do it in the Listview?
I have a LinqDataSource and a GridView displaying a table. Columns of type xml don't show up. I'd like them to show up something like they do in Sql Server query outputs, with a link to display the clickable xml, though there may be another approach i'm not considering (maybe a styled display of the xml data, etc.). Two things i'd like to know how to do
First, get the xml converted to a string, and display it in the table. Maybe the first 30 chars. Finally, style the xml into something useful, like a clickable link to display the full xml, or a sub-table, or a styled string.
So the following works, and displays a nice table, with edit and delete links. But Xml fields are missing. How would you go about adding support for the Xml fields?
Here's the scenario: ASP.NET 3.5 C# app connecting to an MS SQL backend. I created a LINQ to SQL class called test.dbml and dragged a table called tblTest to the design surface. The table has two columns: the primary key is Email and the other column is Name. Then I dropped a LinqDataSource on the page. The LinqDataSource is not connected to a databound control. It will only being used to retrieve the name associated with a supplied email address. In the Page_Load event, I feed the Where clause:
[Code]....
However, I put a breakpoint inside the ldsAdmin_Selected event and it never hits. With an ObjectDataSource, you can use odsAdmin.Select(); to trigger the ObjectDataSource to actually run and return the info. What's the equivalent method of triggering a LinqDataSource?
I have the following code that seems like it should set my insertParameter but everytime an insert happens it uses the default parameter. Do i need to do anything special to make this work?
I've a gridview bound to linqdatasource1 and a details bound to linqdatasource2 (for searching).
When I update the data on detailsview, my gridview is not updating. I've tried handling various gridview events and databinding the gridview in code but it doesn't seem to work.
i have a grdidview control on the .aspx page and i am trying to connect dynamically from code behind and bind the gridview but somehow it throwing me an error... what is wrong with this code?
LinqDataSource LDS_POReport = new LinqDataSource(); LDS_POReport.ContextTypeName = "DataContextDataContext"; LDS_POReport.Selecting += new EventHandler<LinqDataSourceSelectEventArgs>(LinqDataSourcePO_Selecting); this.gvReport.DataSource = "LDS_POReport"; //this.gvReport.DataBind();
Update:
after i update the code to this.gvReport.DataSource = LDS_POReport;
it works fine but when i try to sort i get this error:
The GridView 'gvReport' fired event Sorting which wasn't handled.
have a database and I've created a DBML Linq-to-SQL file to represent this database. I've created a new aspx page and dropped a linqdatasource and a formview control onto it. When I configure the linqdatasource it gives me the choice only to select * from one table...but I want to pull from multiple tables. e.g. I have tables like simple_person, simple_address, simple_phone, and I want to pull from all of them.
I have written the below pages (base of question) to populate my asp.net listview control from an objectdatasource. To allow for easier CRUD commands and to make my application more efficient I want to replace this objectdatasource with a linqdatasource but when I attempt this I receive a binding error which stops my ItemDataBound event firing? I'm basically replacing my objectdatasource with the below linqdatasource...
[Code]....
[Code]....
Am I placing my query within the wrong event? Why does my ItemDataBound event not fire?