台灣最大程式設計社群網站
線上人數
1665
 
會員總數:241313
討論主題:186898
歡迎您免費加入會員
討論區列表 >> ASP.NET >> dropdownlist 選擇問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
dropdownlist 選擇問題
價值 : 30 QP  點閱數:406 回應數:13

樓主

J.Y
門外漢
0 58
952 87
發送站內信

我有設定一dropdownlist 手動databind資料庫TABLE資料

假設TABLE資料如下

a1 b1 c1

da 1 1

gg 1 2

頁面上會SHOW a1欄值 給USER選 , b1是要用來計算的VALUE,c1是自動識別值

user 選gg 後寫入另一TABLE,但都只會寫入da那列的資料

除非改掉b1欄位的值才會正確

請問這是何原因? table試過設a1為主鍵



搜尋相關Tags的文章: [ dropdownlist ] , [ databind ] ,
本篇文章發表於2017-05-10 17:57
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
您好

您很努力的在描述您想做什麼
但是想來關鍵的問題出在您寫的Code
但這邊沒有看到Code,所以很難告訴您可能的問題是什麼
(也許您是動態的Bind資料)

因此,建議您:
1.自學除錯,建議下中斷點,然後用F11進行Step By Step的除錯
然後看看運作的流程是否如您預期

2.貼出相關的Code讓大家可以幫您看看可能的問題在哪

^_^
本篇文章回覆於2017-05-10 19:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

J.Y
檢舉此回應
程式碼如下~謝謝


本篇文章回覆於2017-05-10 19:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
果然是動態綁定資料

您思考一下以下的順序
1.每次按按鈕
2.PostBack
3.資料重新綁定
4.綁定後,剛剛選擇的沒效了,重新綁定後,重新資料綁上去,資料被選擇的是第一筆
5.進入Click事件
6.取得被選擇的資料(已經變成第一筆囉)

要怎麼改?

比較簡單的方法,用DataSource綁定
那麼被選取的狀態會自動透過ViewState保留

不過,您的資料是自己用ADO.NET撰寫讀取
這樣您可以透過『ObjectDataSource』就可以兼顧DataSource的好處以及自己寫程式的靈活
參考看看這篇吧
https://dotblogs.com.tw/topcat/archive/2008/06/27/4395.aspx

^_^
本篇文章回覆於2017-05-10 23:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
小喵個人的撰寫經驗
很少直接使用程式來做綁定
這樣做,要考慮的,要處理的相對多而繁雜

ASP.NET WebForm提供很好的ObjectDataSource控制項
可以把資料存取、商業邏輯抽出來,寫在App_Code或者Models中
甚至可以抽出另成專案,讓這些資料存取與商業邏輯更靈活的應用
又可以保留DataSource的方便性,他幫我們處理了許多(例如:工作狀態的保留、排序、分頁、...)

如果您想在ASP.NET WebForm繼續走下去,建議盡早使用這樣的方式開發
^_^
本篇文章回覆於2017-05-11 09:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

J.Y
檢舉此回應
版主你好

看了你使用的ObjectDataSource

PART2的建立SELECT 如我有多個dropdownlist 可寫在同一類別裡嗎?

區分不同命名
本篇文章回覆於2017-05-11 12:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

MIS2000 Lab
檢舉此回應
Page_Load裡面的 DropDownList
很單純,不用自己寫程式
用DropDownList + SqlDataSource精靈搞定即可

如此一來
不用擔心 PostBack問題,可以簡化您目前的處境
本篇文章回覆於2017-05-11 15:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
PART2的建立SELECT 如我有多個dropdownlist 可寫在同一類別裡嗎?

可以唷,寫成不同的Function名稱就可以囉

^_^
本篇文章回覆於2017-05-11 15:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
補充#7

如我有多個dropdownlist 可寫在同一類別裡嗎?

如果回傳的DataTable欄位不同,那麼寫成不同的Function會比較好
但,如果多個DropDownList回傳的欄位都一樣,那麼,可以寫在一個Function,然後傳入參數來分辨用不同的SQL也是OK的

---
個人的想法提供樓主參考
當我們一開始使用SqlDataSource還蠻好用的
但一旦開始覺得好像不太夠用,會想自己寫資料存取時
這是個很好的契機,可以開始試著把重複性的、邏輯性的、資料存取的相關程式碼,抽出 aspx的Code File,寫成類別、Function
然後搭配ObjectDataSource,那麼熟悉的開發方式會又回來了(處理狀態的記錄那些)
未來又可以試著將App_Code的類別抽出去,往更靈活的開發邁進∼

如果未來要換成MVC,WebAPI等架構
那麼抽出去的類別,就可以共用,不必重新寫一次了

提供樓主參考
^_^
本篇文章回覆於2017-05-11 16:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

J.Y
檢舉此回應
我先測試用了SqlDataSource

但我還是卡在b1欄位的值如果兩個相同

寫入DB時都是跑同值排序的第一個

是否有何原因造成?

ObjectDataSource還在寫

本篇文章回覆於2017-05-11 20:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
你先用SqlDataSource
用設定的方式綁SQL語法
先『不用』動態給予SQL語法

先這樣試試

本篇文章回覆於2017-05-11 23:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

J.Y
檢舉此回應
我用sqldatasource元件精靈做也是同樣問題

後來找到問題解法~如下網址

https://dotblogs.com.tw/jeff377/archive/2008/10/30/5830.aspx

照著試不過裡面有些語法會顯示xxxx不是XX成員的錯誤~

範例下載也抓不了來看Q_Q

不知有無大大試過
本篇文章回覆於2017-05-12 14:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
DropDownList中,項目的Value應該要不同,否則怎麼知道您選到那個呢?
如果您的資料是單一欄位會重複,但複合欄位不會重複
那麼,您的Value應該想辦法讓他不重複
例如,OrderBy 欄位A, 欄位B,然後加上順號
參考這一篇
https://dotblogs.com.tw/topcat/archive/2009/08/06/9906.aspx

^_^
本篇文章回覆於2017-05-12 20:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

J.Y
檢舉此回應
版主你好~

我利用value值跟順號值相加這樣selectvalue可以是唯一值

那請問 cmd.Parameters 寫回DB要怎麼扣回去?
本篇文章回覆於2017-05-22 19:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.