Asp.net controllo datagrid aiuto.

lunedì 02 novembre 2009 - 10.31

mauramo33 Profilo | Newbie

buongiorno a tutti,
prima di tutto mi devo scusare con tutti quanti voi prima di iniziare perche' forse le domande che sto per farvi sono di una banalità enorme .. ma sono alle prime armi .. e sto imparando adesso asp.net.

Inizio con il descrivervi cosa ho fatto in una pagina aspx.
Allora ci sono due componenti .. un textbox e un datagrid.

sono riuscito a fare il filtro dei dati nel mio datagrid attraverso il valore messo nel campo textbox utilizzando:

<FilterParameters>
<asp:ControlParameter ControlID="txtCerca" PropertyName="Text" />
</FilterParameters>
utilizzando questo comando sql:

SelectCommand="SELECT * FROM [tbl_aziende]"
FilterExpression="ragione_sociale like '%{0}%'"

e fin qui nessun problema. Ora pero' nella stessa riga del campo text box, vorrei creare una serie di link contententi le iniziali del campo ragione_sociale .. come se fosse una specie di rubrica, il cui link dovrebbe essere indirizzato alla stessa pagina aggiungendo come filtro oltre a quello esistente questo " and left(ragione_sociale,1) = '%{1}%'" e come parametro la lettera selezionata nell'elenco della rubrica.

come potrei fare ?...

Secondo quesito: si puo' personalizzare la colonna seleziona del datagrid con un tasto che mi rimanda ad una funzione passandogli l'id del record selezionato in una pagina nuova ? ..

grazie mille,

Maurizio

alx_81 Profilo | Guru

>buongiorno a tutti,
ciao

>Inizio con il descrivervi cosa ho fatto in una pagina aspx.
>Allora ci sono due componenti .. un textbox e un datagrid.
e già questo potrebbe essere da cambiare . se usi ASP.Net 2.0 usa GridView e lascia perdere DataGrid

>come potrei fare ?...
devi farti una TEMPLATECOLUMN se devi per forza usare un datagrid, mentre col GridView usa la templatefield:
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.templatefield%28VS.80%29.aspx

>Secondo quesito: si puo' personalizzare la colonna seleziona
>del datagrid con un tasto che mi rimanda ad una funzione passandogli
>l'id del record selezionato in una pagina nuova ? ..
fai tutto gratis con il gridview. Leggi qui per approfondire:
http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview%28VS.80%29.aspx
Puoi crearti una colonna comando con all'interno il pulsante al quale poi passerai il CommandArgument.

>grazie mille,
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

mauramo33 Profilo | Newbie

ciao,
ho seguito il tuo consiglio passando al GridView e devo dire che avevi ragione .. ora ho questo problema:

prima di tutto ho dovuto spostare il datasource del gridview lato codice perche' altrimenti non riuscivo a fare una seleziona composta nella query:

Dim Connessione As SqlConnection
Dim Cerca As SqlCommand
Connessione = New SqlConnection(ConfigurationManager.ConnectionStrings("dbDati").ToString)

Dim Str As String
Dim l As String = Request.QueryString("l")

Str = "SELECT *, tbl_comuni.Denominazione, tbl_comuni.Provincia FROM tbl_aziende INNER JOIN tbl_comuni ON tbl_aziende.cod_comune = tbl_comuni.CodComune "
If txtCerca.Text <> "" Then If InStr(Str, "Where") > 0 Then Str = Str + " and ragione_sociale like '%" & txtCerca.Text & "%' " Else Str = Str + " Where ragione_sociale like '%" & txtCerca.Text & "%' "
If l <> "" Then If InStr(Str, "Where") > 0 Then Str = Str + " and Left(ragione_sociale,1) = '" & l & "' " Else Str = Str + " Where Left(ragione_sociale,1) = '" & l & "' "

Connessione.Open()
Cerca = New SqlCommand(Str, Connessione)
elenco.DataSource = Cerca.ExecuteReader()
elenco.DataBind()
Connessione.Close()

l'elenco viene popolato bene senza problemi .. il punto e' che io avevo attivato l' il sorting = true nel componente ma credo che gestita la connessione via codice debba gestirne anche l'ordinamento. ho visto un po in giro ed ho provato un po di codice. solo che non sono riuscito ad uscirne fuori, per cui ti chiedo un'aiuto.

il mio gridview e' cosi:
<asp:GridView ID="elenco" runat="server" OnSelectedIndexChanged="elenco_SelectedIndexChanged" OnSorting="elenco_sorting"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="PartitaIVA" CellPadding="4" ForeColor="#333333" GridLines="None" Width="100%">
<RowStyle BackColor="#EFF3FB" />
<Columns>
<asp:CommandField ButtonType="Button" ShowSelectButton="True" SelectText=" » "/>
<asp:BoundField DataField="PartitaIVA" HeaderText="Partita Iva" />
<asp:BoundField DataField="ragione_sociale" HeaderText="Ragione Sociale" SortExpression="ragione_sociale" />
<asp:BoundField DataField="tipologia" HeaderText="Tipologia" />
<asp:BoundField DataField="indirizzo" HeaderText="Indirizzo" />
<asp:BoundField DataField="Denominazione" HeaderText="Comune" SortExpression="Denominazione" />
<asp:BoundField DataField="Provincia" HeaderText="Prov" SortExpression="Provincia" />
<asp:BoundField DataField="cap" HeaderText="cap" />
<asp:BoundField DataField="codiceFiscaleTitolare" HeaderText="codiceFiscaleTitolare" />
<asp:BoundField DataField="tipologia_attivita" HeaderText="Tipologia Attività" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<EditRowStyle BackColor="#2461BF" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>

questo e' il codice che sto provando e che sembra funzionare a tutti meno che a me:

Protected Sub elenco_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles elenco.Sorting
Dim dataView As DataView = elenco.DataSource

dataView.Sort = (e.SortExpression & " ") + GetSortDirection(e.SortExpression)
elenco.DataSource = dataView
elenco.DataBind()

End Sub


Private Function GetSortDirection(ByVal sortBy As String) As String
Dim sortDir As String = " ASC"
If ViewState("sortBy") IsNot Nothing Then
Dim sortedBy As String = ViewState("sortBy").ToString()
If sortedBy = sortBy Then
'the direction should be desc
sortDir = " DESC"
'reset the sorter to null
ViewState("sortBy") = Nothing
Else
'this is the first sort for this row
'put it to the ViewState
ViewState("sortBy") = sortBy
End If
Else
'it's null, so this is the first sort
ViewState("sortBy") = sortBy
End If
Return (sortDir)
End Function

mi restituisce questo errore:

Errore server nell'applicazione '/studiomasi'.
--------------------------------------------------------------------------------

Impossibile eseguire il cast di oggetti di tipo 'System.Data.SqlClient.SqlDataReader' sul tipo 'System.Data.DataView'.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.InvalidCastException: Impossibile eseguire il cast di oggetti di tipo 'System.Data.SqlClient.SqlDataReader' sul tipo 'System.Data.DataView'.

Errore nel codice sorgente:


Riga 33:
Riga 34: Protected Sub elenco_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles elenco.Sorting
Riga 35: Dim dataView As DataView = elenco.DataSource
Riga 36:
Riga 37: dataView.Sort = (e.SortExpression & " ") + GetSortDirection(e.SortExpression)


Puoi aiutarmi ?
grazie mille ... in anticipo .. se passi per firenze poi ti offro una fiorentina ..

Maurizio


alx_81 Profilo | Guru

>Riga 35: Dim dataView As DataView = elenco.DataSource
>Puoi aiutarmi ?
secondo me l'errore è quando cerchi di mettere il datasource all'interno di un dataview, ma il data source è un data reader. Prova a fare in modo che il tuo datasource sia un dataset o un datatable.

>grazie mille ... in anticipo .. se passi per firenze poi ti offro una fiorentina ..
ah niente. Anzi scusa il ritardo della risposta.. e cmq sono amante della fiorentina, caschi male


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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