Scegliere tabella datagrid da una dropdownlist

venerdì 07 maggio 2010 - 15.19

serrax Profilo | Junior Member

Salve a tutti..
ho una DatagridView sulla quale c'è un listato di prodotti (in pratica sono dei monitor per pc) e i dati della datagrid sono presi dalla stessa tabella di un db MySQL...
vorrei mettere un controllo da una DropDownList scegliendo la marca dei monitor in modo che nella DatagridView vengano visualizzati solo i monitor della marca selezionata.....
i codici che sto utilizzando sono questi:
il codice c#:
public partial class Prodotti_monitor : System.Web.UI.Page
{
public void Page_Load(object sender, EventArgs e)
{

MySqlConnection connection;
MySqlDataAdapter adapter;
string query;
connection = new MySqlConnection("server=localhost; username=root; password=giovanni; database=prodotti;");
query = "SELECT * FROM monitor ORDER BY prezzo;";
adapter = new MySqlDataAdapter(query, connection);
DataSet ds = new DataSet();
string sqlCmd;
sqlCmd =
"SELECT " +
" marca, " +
" modello, " +
" disponibilita " +
" prezzo " +
" img " +


adapter.Fill(ds, "monitor");
myDatagrid.DataSource = ds.Tables["monitor"].DefaultView;
myDatagrid.DataBind();

}
public void Page_Changed(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
myDatagrid.CurrentPageIndex = e.NewPageIndex;
DataSet DSPageData = new DataSet();
MySqlConnection connection;
MySqlDataAdapter adapter;
string query;
connection = new MySqlConnection("server=localhost; username=root; password=giovanni; database=prodotti;");
query = "SELECT * FROM monitor ORDER BY prezzo;";
adapter = new MySqlDataAdapter(query, connection);
DataSet ds = new DataSet();
string sqlCmd;
sqlCmd =
"SELECT " +
" marca " +
" modello " +
" disponibilita " +
" prezzo " +
" img " +


adapter.Fill(ds, "monitor");
myDatagrid.DataSource = ds.Tables["monitor"].DefaultView;
myDatagrid.DataBind();

}
// protected System.Web.UI.WebControls.DropDownList DropDownList1;
// protected System.Web.UI.WebControls.DataGrid MyDatagrid;

public void DropDownList1_SelectedIndexChanged (object sender, System.EventArgs e)
{

DropDownList dd = (DropDownList)sender;
if (dd.SelectedItem.Text != null)
{
MySqlConnection connection;
MySqlDataAdapter adapter;
string query;
connection = new MySqlConnection("server=localhost; username=root; password=giovanni; database=prodotti;");
query = "SELECT marca LIKE '" +dd.SelectedItem.Text+ "%' FROM monitor ORDER BY prezzo";
adapter = new MySqlDataAdapter(query, connection);
DataSet ds = new DataSet();
string sqlCmd;
sqlCmd =
"SELECT " +
" marca " +
" modello " +
" disponibilita " +
" prezzo " +
" img " +


adapter.Fill(ds, "monitor");
myDatagrid.DataSource = ds.Tables["monitor"].DefaultView;
myDatagrid.DataBind();
}
else
{
DataSet ds = new DataSet();
myDatagrid.DataSource = ds.Tables["monitor"].DefaultView;
myDatagrid.DataBind();
}

}
}

mentre nella pagina asp.net ho il seguente collegamento

<asp:TemplateColumn HeaderText="Immagine">
<ItemTemplate>
<a href='details.aspx?modello=<%# DataBinder.Eval(Container.DataItem, "modello") %>'>

<img ID="img" runat="server"
alt='<%# DataBinder.Eval(Container.DataItem, "modello") %>' height="80"
src='<%# DataBinder.Eval(Container.DataItem, "img", "{0}") %>'
style="border:0;" width="71" />
</ItemTemplate>
<EditItemTemplate>
<img ID="img0" runat="server"
alt='<%# DataBinder.Eval(Container.DataItem, "modello") %>' height="80"
src='<%# DataBinder.Eval(Container.DataItem, "img", "{0}") %>'
style="border:0;" width="71" />
</EditItemTemplate>
</asp:TemplateColumn>

Vi ho postato quest'ultima parte della pagina asp.net perchè quando vado a selezionare un valore della datagridview mi esce errore l'errore alla voce <a href='details.aspx?modello=<%# DataBinder.Eval(Container.DataItem, "modello") %>'> con il seguente errore:
HttpException non è stata gestita dal codice utente
DataBinding: 'System.Data.DataRowView' non contiene una proprietà con nome 'modello'.

E' come se la voce modello non esistesse, ma è impossibile....

come ovvio a questo problema??
grazie

Gluck74 Profilo | Guru

ciao,
io non ho mai usato mySql, quindi non ne conosco la sintassi. ti chiedo dunque a cosa serve questa riga di codice:

sqlCmd = "SELECT " + " marca " + " modello " + " disponibilita " + " prezzo " + " img " +

Hai provato ad usare il controllo sqlDataSource con un parametro per filtrare i modelli dei monitor?

serrax Profilo | Junior Member

Ciao,
in effetti quel codice era superfluo grazie....

no in effetti non sto provando.... se mi fai qualche esempio ne sarei molto lieto...

grazie....

xenical73 Profilo | Newbie

Io non uso c# quindi non so scriverti codice, ma io ho da poco realizzato una cosa simile (anche se il contenuto della tabella è differente)

Ho creato un dropdownlistbox collegata alla tabella che mi interessava e poi impostato una query Select solo riferita al campo desiderato (quindi nel tuo caso la marca dei monitor).

Poi ho creato una formview (nel tuo caso gridview) e creato una query riferita alla stessa tabella a cui e collegato il ddl impostando una select comprensiva di tutti i campi che volevo comparissero nella formview e impostando una clausola WHERE (nel tuo caso marca monitor) = Control e indicando come controllo il ddl creato in precedenza (io ho usato le procedure guidate di VS2008).

Spero di aver interpretato bene la tua necessità

serrax Profilo | Junior Member

ciao....
grazie a tutti...
ho appena risolto..... inserirsco il codice per far si che qualcuno posso risolvere il mio stesso problema....

public void DropDownList1_SelectedIndexChanged (Object sender, EventArgs e)
{

DropDownList dd = (DropDownList)sender;
if (dd.SelectedValue.ToString() != null)
{
MySqlConnection connection;
MySqlDataAdapter adapter;

string query;
connection = new MySqlConnection("server=localhost; username=root; password=giovanni; database=prodotti;");

query = "SELECT * FROM monitor WHERE marca='" + dd.SelectedValue.ToString() + "' ORDER BY prezzo";
adapter = new MySqlDataAdapter(query, connection);
DataSet ds = new DataSet();
adapter.Fill (ds, "marca");
myDatagrid.DataSource = ds.Tables["marca"].DefaultView;
myDatagrid.DataBind();
}

}

ciao a tutti.... al prossimo (ma breve post) ....

grazie

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5