台灣最大程式設計社群網站
線上人數
2322
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> ASP.NET >> DropDownList & GridView 關連疑問
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
DropDownList & GridView 關連疑問
價值 : 50 QP  點閱數:606 回應數:7
樓主

state526
門外漢
0 4
265 8
發送站內信

想請教為何選擇DropDownList下拉是選項時,GridView顯示資料永遠只有第一筆,而且不能新增重覆值?
1.怎樣才能夠顯示多筆料呢?
2.不能新增重覆值是因為我資料庫主鍵關係嗎?
以下原始檔提供參考~救救我這菜鳥 謝謝大家




搜尋相關Tags的文章: [ DropDownList ] , [ GridView ] , [ Visual Studio 2017 ] ,
本篇文章發表於2018-08-17 09:43
1樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應


1.怎樣才能夠顯示多筆料呢?

您有沒有試過在資料庫中直接執行,看看結果是否真的有多筆嗎?

2.不能新增重覆值是因為我資料庫主鍵關係嗎?


如果資料表的主鍵(主索引)是「地區」
那麼
相同『地區』只能有一筆資料
資料讀出來,的確就會址有一筆
而且,當有重複資料發生時,就會有錯誤發生

因此,
您先回到資料表的定義
該資料表,他的目的是什麼?
代表每一筆資料獨特性、唯一性的值,是那個(或者哪一些)欄位

您可否描述一下,這個資料表,他的用途是什麼?
或許可以給您建議,合適的主索引是那個(或者哪些)欄位

^.^a

本篇文章回覆於2018-08-18 20:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

state526
檢舉此回應
topcat 版大您好,

已經有嘗試將 主鍵(主索引)"地區"移除 已解決重複KEY值及已出現多筆問題(但是移除其中一筆之後就無法顯示其它資料了)。
我的資料表規劃如下:
資料表A DropDownList : 竹南 台中 台南
資料表B List : 地區 設備名稱 固定IP 虛擬IP 子網路遮罩 預設閘道 DNS ID PW 設備位置 備註
當下拉式選單選擇"竹南",則顯示List地區竹南的所有明細表。
(主鍵原本是設定地區<已移除>)
請教版大,有什麼建議的方式下去做呢?

PS 有參考網路上,在GridView新增觸發「新增」功能的按鈕(可成功執行)

本篇文章回覆於2018-08-21 10:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
主鍵移除不是根本的方式

資料表的規劃,本來就需要根據資料,去找出每一筆資料,有哪個(或哪些)資料欄位他具備代表每一筆資料的『唯一性、獨特性』
如此在刪除單一筆資料的時候,才能處理
而且與其他資料表的關聯時,才能有依據

從您的描述來看
資料表A DropDownList : 竹南 台中 台南
資料表B List : 地區 設備名稱 固定IP 虛擬IP 子網路遮罩 預設閘道 DNS ID PW 設備位置 備註


假設資料表B代表各地的設備

每個設備的『固定IP』是唯一的,獨特且不重複的,那麼就可以用『固定IP』當作是主索引
又或者,每個設備的『MacAddress』是固定且不重複的,那麼或許可以增加『MacAddress』當作是主索引
(但維修更換MacAddress時,就需要修改主索引)
又或者,給每個設備,編一個不重複,唯一性的『設備代號』,那麼,就可以用這『設備代號』當作是主索引

主索引,就是要去找出,代表『每一筆資料唯一性、獨特性、不重複』的特別資料,可以是一個欄位,也可以多個,『不可以沒有』

至於資料表A,其實他可以是真實存在的資料表,代表全省各地區的劃分
也可以是虛擬的View,從資料表B的『地區』DISTINCT出來的結果


^_^
本篇文章回覆於2018-08-21 12:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

state526
檢舉此回應
topcat 版大,
實在太強大了!! 原來我只是錯在主鍵問題。
我新增一欄位"資產編號"將他設為主鍵,問題就解決了。
另外 如果下拉式選單(DropDownList 我想新增一欄位為全部)那在(GridView要怎全部顯示)
需要多寫什麼程式語法嗎??
本篇文章回覆於2018-08-21 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
如果下拉式選單(DropDownList 我想新增一欄位為全部)那在(GridView要怎全部顯示)
需要多寫什麼程式語法嗎??


有這種需求的,通常我會建議
SqlDataSource無法滿足需求,建議改用ObjectDataSource

這時需要自己寫資料存取的程式了,而不是拖拉放可以解決

小喵自己完全不使用SqlDataSource
會將資料存取的部分,抽出來,寫在App_Code裡面類別中的Function
然後用『ObjectDataSource』去綁定寫好的類別、Function
最後再把GridView與ObjectDataSource綁定
這部分要說明清楚,篇幅就有點大了
改天有空再來補

^.^a
本篇文章回覆於2018-08-21 16:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
如果下拉式選單(DropDownList 我想新增一欄位為全部)那在(GridView要怎全部顯示)
需要多寫什麼程式語法嗎??


針對#4, 補充#5
並不是SqlDataSource寫不出來
只是SqlDataSource對小喵來說,算是過度的工具
要靈活的撰寫與應用,還是建議最終目標式使用『ObjectDataSource』

不過回頭想想,對您來說跨度有點大
建議您,未來還是以使用ObjectDataSource為目標

回頭說說,如果要用SqlDataSource,要怎麼設計
由於我手邊沒有您的資料庫,所以我先以北風資料庫的Employees(員工)與Orders(訂單)這兩個資料表當作範例

選擇員工,則訂單顯示該員工的相關訂單
然後,在下拉選擇員工的地方,新增一個『全部』的選項

關鍵在於
1.幫GridView準備兩個SqlDataSource
一個是全部顯示,一個是依據DropDownList顯示相關的
2.預設(一開始),讓GridView的DataSourceID指向『全部』那個
3.當DropDownList選項改變時,如果是全部,就讓DataSourceID指向『全部』那個,不然就是指向『員工』的那個

aspx的部分:


CodeFile的部分:


就醬子

但小喵個人不推這方式,還是比較推薦使用ObjectDataSource的方式
^_^
本篇文章回覆於2018-08-21 17:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

state526
檢舉此回應
topcat 版大,
太謝謝你了,經討論後先暫時不加入全部。
這一頁面算是完成80%了。
打算另一頁面,來嘗試看看您說的"ObjectDataSource的方式"
因為對SQL不是很熟也幾乎都忘光了。我會好好研究的。
如果有不懂在上來問問前輩們。
謝謝版大,寫完這一頁,自信心又找回來了。
本篇文章回覆於2018-08-23 14:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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