2013-09-21 126 views
0

我試圖從數據庫中檢索信息。用戶輸入他正在尋找的人的身份證文本框的ID,而不是按下顯示按鈕。網格視圖應顯示結果。但是當按下按鈕時,沒有任何反應。任何人都可以幫忙或告訴我我該檢查什麼? 代碼按鈕:單擊按鈕 - 無動作

protected void btnDisplay_Click(object sender, EventArgs e) 
     { 
      SqlConnection conn = new SqlConnection("Data Source="Name";Initial Catalog="Name";Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand("displayData", conn); 
      conn.Open(); 
      cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = Convert.ToInt32(txtID.Text); 
      cmd.CommandType = CommandType.StoredProcedure; 
      SqlDataReader rd = cmd.ExecuteReader(); 
      grvResults.DataSource = rd; 
      grvResults.DataBind(); 
     } 

在這裏被存儲的過程:

USE ["Name"] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER procedure [dbo].[displayData] (@ID int) 
as 
begin 
SELECT * FROM Customers WHERE ID = @ID 
end 

這裏是顯示數據的方法:

public List<Customer> displayData() 
     { 
      List<Customer> lst = new List<Customer>(); 
      SqlConnection conn = new SqlConnection("Data Source="Name";Initial Catalog="Name";Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand("Select * From Customers", conn); 
      conn.Open(); 
      SqlDataReader rd = cmd.ExecuteReader(); 
      while (rd.Read()) 
      { 
       lst.Add(new Customer() 
       { 
        ID = rd.GetInt32(0), 
        FName = rd.GetString(1), 
        LName = rd.GetString(2) 

       }); 
      } 
      return lst; 
     } 

ASPX爲按鈕:

<asp:Button ID="btnDisplay" runat="server" Text="Display" OnClick="btnDisplay_Click" /> 
+0

你也可以顯示按鈕的ASPX標記嗎? –

+0

當然,剛添加。 – Eugene

+0

除非我錯過了一些東西 - 它看起來沒問題。你有什麼錯誤嗎?如果沒有,你確定SP返回數據嗎?你可以嘗試使用相同的參數從SSMS自行運行它嗎? –

回答

0

您是否嘗試在按鈕單擊中放置斷點?它是否達到斷點?如果不是那麼我會說刪除

OnClick="btnDisplay_Click" 

從您的aspx頁面。然後通過選擇控件及其事件來添加.cs頁面中的默認點擊事件。他們嘗試逐行調試。

+0

我檢查了onclick事件,我好像我有VS錯誤。當我再次重寫了一切,它開始工作 – Eugene

0

給這個c在你的代碼隱藏中嘗試一下。它應該正確綁定並填充gridview。如果有效,請從此處添加更多代碼。如果它不起作用,請查看連接字符串等內容。讓我知道。

 SqlConnection conn = new SqlConnection("Data Source="?";Initial Catalog="?";Integrated Security=True"); 

     SqlCommand cmd = new SqlCommand("SELECT * FROM Customers WHERE ID = @ID", conn); 
     cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = Convert.ToInt32(txtID.Text); 

     SqlDataAdapter da = new SqlDataAdapter(); 
     da.SelectCommand = cmd; 

     DataTable dt = new DataTable(); 

      conn.Open(); 
      da.Fill(dt); 
      conn.Close(); 

     grvResults.DataSource = dt; 
     grvResults.DataBind(); 
+0

爲什麼?網格可以綁定到DataReader以及DataTable。 –

+0

我不確定他想要完成什麼。他在他的代碼中使用了'conn.Open()'兩次,並且從不調用'conn.Close()'我只是想提供可行的代碼,我懷疑數據表和數據讀取器之間的性能是一個考慮因素。 – Zerkey

+0

感謝您的幫助,將盡力。 – Eugene

0

我認爲你是複雜的自己太多 首先做到這一點: Select the first option: SQL statement or stored procedure Then select your stored procedure Select The source Control (your Textbox) then click next

Then enter your client Id and click the button. NOTE on the button click you need to write this: **SqlDataSource1.DataBind();**

這應該使它發揮作用。你已經有了一個存儲過程,這使得它更容易。 (對不起,我想確保你明白這一點)

+0

謝謝,是的,它的工作原理,我以前試過。我只是想以其他方式去做。 – Eugene