2013-05-29 9 views
6

Sto cercando di creare un semplice database di libreria. Io elenco i risultati della ricerca in una vista a griglia, quindi ho una casella di testo e un pulsante, l'utente inserisce il pulsante di prestito isbn e clic. Quindi, se c'è un numero sufficiente di elementi (itemNumber> 0) viene concesso in prestito dall'utente. Ecco lo screenshot dell'interfaccia utente:Come aggiornare Gridview dopo aver premuto un pulsante in asp.net

enter image description here

La mia domanda è, quando l'utente fa clic sul pulsante prestito il prestito può o non può essere successo. In entrambi i casi, stampo un messaggio che indica se il prestito ha successo o meno, e voglio anche che venga visualizzato il gridview aggiornato. Il problema è che, dopo aver premuto il pulsante di prestito, il gridview scompare e vedo solo la casella di testo, il pulsante e il messaggio sullo schermo. Come posso mostrare la versione aggiornata di gridview dopo aver premuto il pulsante di prestito?

Ecco il file di codice:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SearchResults.aspx.cs" Inherits="Pages_SearchResults" %> 

<!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"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 

</div> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ISBN" DataSourceID="SqlDataSource1" 
    onselectedindexchanged="GridView1_SelectedIndexChanged" 
    onrowcommand="GridView1_RowCommand"> 
    <Columns> 
     <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
     <asp:BoundField DataField="ISBN" HeaderText="ISBN" ReadOnly="True" 
      SortExpression="ISBN" /> 
     <asp:BoundField DataField="AuthorName" HeaderText="AuthorName" 
      SortExpression="AuthorName" /> 
     <asp:BoundField DataField="AuthorlName" HeaderText="AuthorlName" 
      SortExpression="AuthorlName" /> 
     <asp:BoundField DataField="ItemType" HeaderText="ItemType" 
      SortExpression="ItemType" /> 
     <asp:BoundField DataField="PublishYear" HeaderText="PublishYear" 
      SortExpression="PublishYear" /> 



     <asp:BoundField DataField="numOfCopies" HeaderText="Number of Copies" 
      SortExpression="numOfCopies" /> 



    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [Items] WHERE ([Title] LIKE '%' + @Title + '%')"> 
    <SelectParameters> 
     <asp:FormParameter FormField="tSearchBox" Name="Title" Type="String" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
<br /> 
<asp:Label ID="Label1" runat="server" Text="Type ISBN to loan:"></asp:Label> 

         

E qui è la cs f ile:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 

public partial class Pages_SearchResults : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Response.Redirect("Default.aspx"); 
} 


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Users\\SUUSER\\Documents\\Visual Studio 2010\\Projects\\Library\\LibWebSite\\App_Data\\LibDatabase.mdf;Integrated Security=True;User Instance=True"; 

    Int32 verify; 

    string title = GridView1.HeaderRow.Cells[0].Text, isbn = GridView1.HeaderRow.Cells[1].Text, name = GridView1.HeaderRow.Cells[2].Text, lname = GridView1.HeaderRow.Cells[3].Text, type = GridView1.HeaderRow.Cells[4].Text, year = GridView1.HeaderRow.Cells[5].Text; 


} 
protected void bLoanButton_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Users\\SUUSER\\Documents\\Visual Studio 2010\\Projects\\Library\\LibWebSite\\App_Data\\LibDatabase.mdf;Integrated Security=True;User Instance=True"; 

    string user = "select CurrentID from CurrentUser"; 

    SqlCommand cmd1 = new SqlCommand(user, con); 
    con.Open(); 
    string get = cmd1.ExecuteScalar().ToString(); 

    string query1 = "insert into LoanTable(StudId,ISBN,onBorrow) values (" 
     + "'" + get + "'" + "," + "'" + tLoanBox.Text + "'" + "," 
     + "'" + "1" + "'" + ")"; 

    string numQuery = "select numOfCopies from Items where ISBN='" + tLoanBox.Text + "'"; 

    SqlCommand cmdnumQuery = new SqlCommand(numQuery, con); 

    SqlCommand cmd2 = new SqlCommand(query1, con); 

    int result; 

    int num=Convert.ToInt32(cmdnumQuery.ExecuteScalar()); 


    result = cmd2.ExecuteNonQuery(); 

    if (num > 0) 
    { 

     if (result > 0) 
      Response.Redirect("LoanSuccesfull.aspx"); 
    } 
    else 
     notAvailable.Visible = true; 

    con.Close(); 


} 
} 

Ed ecco il codice per il tasto prestito:

protected void bLoanButton_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Users\\SUUSER\\Documents\\Visual Studio 2010\\Projects\\Library\\LibWebSite\\App_Data\\LibDatabase.mdf;Integrated Security=True;User Instance=True"; 

    string user = "select CurrentID from CurrentUser"; 

    SqlCommand cmd1 = new SqlCommand(user, con); 
    con.Open(); 
    string get = cmd1.ExecuteScalar().ToString(); 

    string query1 = "insert into LoanTable(StudId,ISBN,onBorrow) values (" 
     + "'" + get + "'" + "," + "'" + tLoanBox.Text + "'" + "," 
     + "'" + "1" + "'" + ")"; 





    SqlCommand cmd2 = new SqlCommand(query1, con); 

    int result; 




    result = cmd2.ExecuteNonQuery(); 



     if (result > 0) 
     { 
      loanSuccesful.Visible = true; 
      Response.Redirect("LoanSuccesfull.aspx"); 

     } 





    con.Close(); 


} 

Apprezzo tutto l'aiuto. Grazie

risposta

29

Tutto quello che dovete fare è nel vostro bLoanButton_Click, aggiungere una riga al rilegare la griglia per lo SqlDataSource:

protected void bLoanButton_Click(object sender, EventArgs e) 
{ 

//your same code 
........ 

GridView1.DataBind(); 


} 

riguarda

5

ero totalmente perso su perché il mio Gridview.Databind() non si aggiornerebbe.

Il mio problema, ho scoperto, era il mio gridview era all'interno di un UpdatePanel. Per ottenere il mio GridView per FINALMENTE aggiornamento è stato questo:

gvServerConfiguration.Databind() 
uppServerConfiguration.Update() 

"uppServerConfiguration" è l'ID associato al mio UpdatePanel nel mio codice asp.net.

Spero che questo aiuti qualcuno.

0

Prima di eseguire il binding dei dati, modificare il metodo di associazione della griglia, assegnare GridView.EditIndex a -1. E 'risolto lo stesso problema per me:

gvTypes.EditIndex = -1; 
gvTypes.DataBind(); 

gvTypes è il mio ID GridView.

0

L'aggiunta di GridView1.DataBind() all'evento clic del pulsante non ha funzionato per me. Tuttavia, l'ha aggiunto all'evento SqlDataSource1_Updated.

Protected Sub SqlDataSource1_Updated(sender As Object, e As SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Updated 
    GridView1.DataBind() 
End Sub