Problema con una gridview

martedì 03 marzo 2009 - 14.26

Pozz4ever Profilo | Newbie

innanzitutto, ciao a tutti. sono un quasi ignorante in fatto di asp.net e C#, dato che per studio ho sempre programmato in java e poco altro e ora, per un lavoro legato alla tesi, mi ritrovo ad usare asp.net e c# e devo ammettere che ci sto un po' perdendo la testa...

cercherò di spiegare il più chiaramente possibile il mio problema. all'interno della mia applicazione sto creando una pagina che mi permetta di effettuare ricerche sul mio database. questa pagina presenta una gridview legata ad un linqdatasource che punta alla tabella "Collaboratori", della quale voglio mostrare semplicemente nome e cognome. all'interno della pagina voglio aggiungere una serie di cose per effettuare delle ricerche. ho iniziato aggiungendo una textbox nella quale inserire un cognome e che mi permetta di visualizzare nella gridview solo i record che matchano con il cognome digitato. fin qui, tutto bene.

il problema sorge quando voglio aggiungere una dropdownlist. questa dropdownlist non discrimina direttamente su un campo della tabella Collaboratori, ma su un'altra tabella, la tabella "Assegnazioni", joinata con quella dei collaboratori. in pratica, tramite la dropdownlist vorrei poter vedere i record dei collaboratori che hanno svolto in passato un certo ruolo. quello che pensavo di fare era di effettuare una select di questo tipo, sulla base del valore selezionato nella dropdownlist:

SELECT DISTINCT [IDCollaboratore]
FROM [SEMA].[dbo].[Assegnazioni]
WHERE [IDRuolo] = "un certo valore";

salvare tutti gli idcollaboratori trovati in una lista e poi fare in modo che la gridview mi mostri solo i record i cui identificatori sono contenuti all'interno della lista. ho seguito qualche consiglio e ho provato ad effettuare tale controllo all'interno del metodo LinqDataSource1_Selecting:

List<int?> resID = new List<int?>();
SportEventManagementDataContext db = new SportEventManagementDataContext();
var rol = from p in db.Assegnazionis
where p.IDRuolo == Dropdownlist1.SelectedValue
select p;
foreach (Assegnazione a in rol)
{
if (!(resID.Contains(a.IDCollaboratore)) && a.IDCollaboratore != null)
resID.Add(a.IDCollaboratore);
}
e.Result = db.Collaboratoris.Where(p => resID.Contains(p.IDCollaboratore));

questo non funziona, perchè credo di aver capito che il metodo selecting venga chiamato quando carico la pagina, e quando carico la pagina il valore della dropdownlist è nullo. ho anche provato ad aggiungere direttamente un determinato valore invece di "Dropdownlist1.SelectedValue": in questo caso funziona, però chiaramente mi mostra al caricamento della pagina tutti i record contenuti nella lista con quel valore, e non si aggiorna se modifico la dropdownlist.
posto per completezza anche il codice della pagina aspx così si capisce con cosa ho a che fare:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Search_Resources.aspx.cs" Inherits="Actions_Search_Resources" %>
<%@ Register src="~/DynamicData/Content/GridViewPager.ascx" tagname="GridViewPager" tagprefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphMain" Runat="Server">
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" />
<asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true" />

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<b>Search Resources</b>

<br /><br /><br />

<table style="width: 100%;">
<tr>
<td>
Surname:
</td>
<td>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>&nbsp;&nbsp;
<asp:Button ID="Button1" runat="server" Text="Search" />
</td>
</tr>
</table>

<br /><br />

<table style="width: 100%;">
<tr>
<td>
Resource available from:
</td>
<td>
<asp:TextBox ID="TextBox2" runat="server" CssClass="droplist" Columns="20"></asp:TextBox>

<asp:ImageButton runat="server" ID="ImageButton1" ImageUrl="~/DynamicData/content/Images/Calendar_scheduleHS.png" />
<ajaxToolkit:CalendarExtender ID="CalendarExtender1" runat="server"
TargetControlID="TextBox2" PopupButtonID="ImageButton1">
</ajaxToolkit:CalendarExtender>
</td>
</tr>
<tr>
<td>
To:
</td>
<td>
<asp:TextBox ID="TextBox3" runat="server" CssClass="droplist" Columns="20"></asp:TextBox>

<asp:ImageButton runat="server" ID="ImageButton2" ImageUrl="~/DynamicData/content/Images/Calendar_scheduleHS.png" />
<ajaxToolkit:CalendarExtender ID="CalendarExtender2" runat="server"
TargetControlID="TextBox3" PopupButtonID="ImageButton2">
</ajaxToolkit:CalendarExtender>
&nbsp;&nbsp;
<asp:Button ID="Button2" runat="server" Text="Search" />
</td>
</tr>
</table>

<br /><br />

<table style="width: 100%;">
<tr>
<td>
Shows only:
</td>
<td>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
&nbsp;&nbsp;
<asp:Button ID="Button3" runat="server" Text="Search" OnClick="Button3_Click" />
</td>
</tr>
</table>

<br /><br />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<br /><br />


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True"
DataSourceID="LinqDataSource1"
CssClass="gridview" AllowSorting="True">
<PagerSettings PageButtonCount="10" />
<Columns>
<asp:BoundField DataField="IDCollaboratore" HeaderText="IDCollaboratore"
ReadOnly="True" SortExpression="IDCollaboratore" Visible="false" />
<asp:BoundField DataField="Nome" HeaderText="Nome" ReadOnly="True"
SortExpression="Nome" />
<asp:BoundField DataField="Cognome" HeaderText="Cognome" ReadOnly="True"
SortExpression="Cognome" />
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="AssignHyperLink" runat="server"
NavigateUrl='<%# "~/Actions/Assign_Resource.aspx?id=" + HttpUtility.UrlEncode(DataBinder.Eval(Container.DataItem, "IDCollaboratore").ToString()) + "&detid=" + detailID %>'
Text="Assign" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle CssClass="footer"/>
<PagerTemplate>
<asp:GridViewPager runat="server" />
</PagerTemplate>
<EmptyDataTemplate>
There are currently no items in this table.
</EmptyDataTemplate>
</asp:GridView>

<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="SportEventManagementDataContext"
Select="new (IDCollaboratore, Nome, Cognome)" TableName="Collaboratori"
AutoGenerateWhereClause="True">
<WhereParameters>
<asp:ControlParameter ControlID="TextBox1" Name="Cognome" PropertyName="Text"
Type="String" />
</WhereParameters>
</asp:LinqDataSource>

</ContentTemplate>
</asp:UpdatePanel>

</asp:Content>


io in pratica vorrei fare in modo che selezionando un valore dalla dropdownlist e cliccando il bottone ad essa collegato, mi si aggiornasse la gridview. non riesco però a capire come effettuare tale operazione. qualcuno può darmi un aiuto, per favore?
grazie

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5