看板 C_Sharp 關於我們 聯絡資訊
cs檔 protected void BtnSearch_Click(object sender, EventArgs e) { using(IntraDB DB = new IntraDB()) { using(IDataReader dr =DB.ClientInfoSearch(1, txtSearch.Text)) { gdvSearch.DataSource = dr; gdvSearch.DataBind(); } } } aspx檔 <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# String.Format ("a1.aspx?CID={0}", Eval("CID"))%>' ><%#Eval("BusinessName")%></asp:HyperLink> 原本寫的功能是search頁面搜尋會員資料 搜尋出來的會員資料放到gridview 每個會員會形成一個超連結 點下去 會跳到修改資料的頁面 並且把有的資料帶過去 然後我現在要寫的是 如果搜尋出來的資料只有1筆 就不會出現連結 而會直接跳到修改的頁面 並且原有的資料也會帶過去 請問一下要怎麼寫 我想了很久 網路也有查 不過就是寫不出來 謝謝各位了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.80.253.185
qwer820404:那就在後端進行判斷 但是Datareader是無法取得資料數 04/16 20:44
qwer820404:如果你是用gridview建議就用datatable比較適合吧 04/16 20:45
qwer820404:DataTable.Rows.Count 可以取得資料列數目 04/16 20:46
qwer820404:>1 就導向修改頁面 導向方式有很多種 04/16 20:46
qwer820404:看你的需求 可以用javascript導 也可用Response的 04/16 20:47
qwer820404:帶資料也有很多種 Cookie 或Session 或Url Parameter 04/16 20:47
qwer820404:記得編碼(中文字) 跟 安全性的問題囉 04/16 20:47
後來修改成下面那樣 不過會出現 Invalid Attempt To Call MetaData When Reader Is Closed 不知道是哪邊有問題?? DataTable dt = new DataTable(); using(IntraDB DB = new IntraDB()) { using(IDataReader dr =DB.ClientInfoSearch(1, txtSearch.Text)) { dt.Load(dr); if (dt.Rows.Count == 1) { Response.Redirect("ClientsModify.aspx?CID="+dr["CID"].ToString()); 這句出現Invalid attempt to call MetaData when reader is closed. gdvSearch.DataSource = dt; gdvSearch.DataBind(); } else { gdvSearch.DataSource = dt; gdvSearch.DataBind(); } ※ 編輯: KSCIECS 來自: 219.80.253.185 (04/17 12:00)
qwer820404:哦 執行順序的問題 04/17 21:07
qwer820404:在用Response.Redirect這種導向的時候要注意 04/17 21:07
qwer820404:他之後的程式碼都會失效 因為他是"直接轉向" 04/17 21:08
qwer820404:那個錯誤是說 你的datareader 的連接被關掉了 04/17 21:08
qwer820404:所以dr["CID"]會跑error出來 兇手就是redirect把他斷了 04/17 21:09
qwer820404:建議可以改成註冊javascript到前端 導向會比較好 04/17 21:10
ssccg:dt.Load(dr)之後就把dr關了啊,你為什麼不從dt讀要從dr讀? 04/18 10:48
ssccg:改成dt.Rows[0]["CID"]就可以了吧? 04/18 10:50
ssccg:還有都redirect了下面兩行bind沒用了吧 04/18 10:50