台灣最大程式設計社群網站
線上人數
967
 
會員總數:245228
討論主題:189098
歡迎您免費加入會員
討論區列表 >> VB.NET >> 如何在 BindingSource.Filter 的篩選之後 進行資料列的數量限制
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何在 BindingSource.Filter 的篩選之後 進行資料列的數量限制
價值 : 200 QP  點閱數:331 回應數:28

樓主

李濟宇
門外漢
0 2
81 16
發送站內信

我目前已經用BindingSource.Filter 進行兩個條件的篩選
而篩選出來的資料列有十幾條的話 我該如何限制他 只出現最符合篩選要求的 前三項資料列呢??
拜託各位大大了
我已經試過三種
BindingSource.Count <<這個只能回傳 篩選過後的資料列數量 無法設定限制
DataGridView.Rowcount << 這個我有看到網路上有寫道 但是我在VS2017中 沒看到此屬性
DataGridView.playedrowcount << 這個有出現 但是我不管怎麼寫 都無法按照我的需求呈現

搜尋相關Tags的文章: [ 資料列數量限制 ] , [ BindingSource.Filter ] ,
本篇文章發表於2019-11-21 13:17
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

P陳
檢舉此回應
目前找不到內建相關的方法
想到的作法有二
1.在 從資料庫載入時 控制只讀取 3 Row
Select Top 3 * from table1

2.讀入後增加一個序號欄位並由1開始給編號
就可以設
DataGridView1.DataSource = Bs1
Bs1.Filter = " 序號<=3 "
本篇文章回覆於2019-11-26 14:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

李濟宇
檢舉此回應
你好 因為我是從vb用資料連結&資料來源的方式 來做
sql的語法貌似無法使用
而第二種方法目前覺得可行
但我現在卡在說 當我fitler篩選完 該怎麼把她的資料匯進表格再增加一個序號攔的?
是應該自己在寫一對應的空資料表進去 還是 有虛擬資料表可以讓我匯入 目前卡在這邊 拜託大大了
本篇文章回覆於2019-11-27 16:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
類似如下

取得 DT1 後
dt1.columns.add("seqno","System.Integer")
Dim II as integer=0
for each row1 as datarow in dt1.rows
II+=1
row1("Seqno")=II
next
bs1.datasource=dt1
datagridview1.datasource=bs1
bs1.filter="seqno <=3"


本篇文章回覆於2019-11-27 22:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

Ader Chen
檢舉此回應

'假設資料來源是 DataTable1,
'如果不要求一定要用 BindingSource 的話, 會簡單一些:
'以下舉例:

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

李濟宇
檢舉此回應
謝謝回應
首先一樓大大
我這邊 跑不出 datatable 的 應該叫做指令吧 (就是 打data 就會有一個選單可以選那邊)
因此我是用 datagridview 代替 dt1 因為 我直覺覺得 filter選完 會在這個表格中顯現
而且 後續的 .columns.add 和 .rows
都可使用 將DT1改成datagridview後 我程式有成功寫出來且沒錯誤
但跑出來依舊 不是我想要的前三筆資料
我那段程式 是放在 Bindingsource.filter 的後面 這位置對嗎?

二樓大大
我也照著你的方式寫 也大略的懂
但一樣是 datatable這邊跑不出來 而這邊也無法使用datafridviwe 進行代替
因為是在VB上 連結 資料來源 進行 程式編寫 可能跟在sql 有些許不同

不好意思 我是最近因為工作上的關係 才開始學VB(之前沒碰過程式)(看書本學習中)(新觀念vb2017程式設計現在主要是在後面的資料庫部分) 若 問題過於膚淺 還請原諒
本篇文章回覆於2019-11-29 15:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

P陳
檢舉此回應
您不是只要三筆嗎? 不是您要的那三筆?
可否將這段程式PO上來。不然不知您的問題在那?
本篇文章回覆於2019-11-29 15:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

P陳
檢舉此回應
然後我覺得 Ader Chen 的方法是很好的方法,請您試試。
本篇文章回覆於2019-11-29 15:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

李濟宇
檢舉此回應
不是我的意思是 她出現的還是我篩選完的全部資料數 我只想要留篩選完的前三筆資料這樣

程式.... 基本上 我目前完全就是內建的程式
我的程式硬要說就只有寫一行 Bindingsource.filter= "條件" 而已
其他都是內建好的
(就是我將我設好的資料來源中的datatable 直接拉近form 的表單 會自動形成 datagridview、bindingsource、tableAdapter 等等元件 這樣)
我現在僅僅是將 表單點進程式(檢視程式碼) 只輸入那一行 控制 資料來源 datatable所輸出的資料而已

不知道這樣可以懂我的意思嗎
本篇文章回覆於2019-11-29 15:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

李濟宇
檢舉此回應

Public Class Form1
Private Sub 書籍BindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles 書籍BindingNavigatorSaveItem.Click
Me.Validate()
Me.書籍BindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.產品DataSet)

End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'TODO: 這行程式碼會將資料載入 '產品DataSet.書籍' 資料表。您可以視需要進行移動或移除。
Me.書籍TableAdapter.Fill(Me.產品DataSet.書籍)

Dim p As Integer

p = 500

書籍BindingSource.Sort = "訂價"
書籍BindingSource.Filter = "訂價> " & p



End Sub



End Class
本篇文章回覆於2019-11-29 16:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

李濟宇
檢舉此回應

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

Ader Chen
檢舉此回應

猜猜看...
您程式中應該會有類似下行的程式:
DataGridView1.DataSource = 書籍BindingSource

將他改為:
DataGridView1.DataSource = CType(書籍BindingSource.DataSource, DataTable).Select(條件).Take(數量).CopyToDataTable

(可能需將 DataGridView1 改為你的 DataGridView 的名稱)
本篇文章回覆於2019-11-29 16:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

P陳
檢舉此回應
您直接在 datagridview1 屬性右鍵的Datasource = 書籍BindingSource
1.我們一般不會這樣作,請改成 無
2.然後在程式中給
datagridview1.datasource=書籍BindingSource

3.請將程式改成如下 來看看 Filter 前後的資料有沒有變化
Dim p As Integer
p = 500
msgbox (書籍BindingSource.count)
書籍BindingSource.Sort = "訂價"
書籍BindingSource.Filter = "訂價> " & p
msgbox (書籍BindingSource.count)

datagridview1.datasource=書籍BindingSource
本篇文章回覆於2019-11-30 09:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

李濟宇
檢舉此回應
回Ader Chen
想問一下指令中的datatable 應該是指 我的資料表吧?
我直接打 datatable 會跑出來 但是 我想輸入我的書籍資料表 我輸入了它的名稱 卻沒有 所以我是直接打datatable
但跑出來事都沒資料 但 是可以跑得 指令上都沒有錯誤
我 點資料表 進 "以設計工具編輯資料集" 進去看到 name 是 書籍 跟上面名稱是 書籍 datatable ,但就是不懂為什麼跑不出來


回 p陳
有的 照這個打 他的資料數目 會有變化
我原本有24筆資料 我篩選完 有五筆
但這情況 希望讓他只顯示 前三筆
本篇文章回覆於2019-12-02 09:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

P陳
檢舉此回應
dim DtA,DtB as datatable
dtA=書籍BindingSource.datasource

dtB=dtA.select("訂價>500").take(3).CopyToDataTable <--- 取得合條件的3筆
datagridview1.datasource=DtB


本篇文章回覆於2019-12-02 22:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

李濟宇
檢舉此回應
回 P陳大大
試完 我跑是 沒辦法顯示任何一筆資料 但 書籍BindingNavigator 上的資料列數 並沒有經過篩選(呈現全部資料數)

而我又試了
dim DtA as datatable
dtA=書籍BindingSource.datasource

datagridview1.datasource=dta

一樣的結果


而在試的過程中有一件事情覺得怪異

dim DtA as datatable
dtA=書籍BindingSource.datasource

datagridview1.datasource=書籍BindingSource

這樣 也是一樣的結果,雖然跟dta 完全沒扯上關係 但卻依舊顯示不出來 這點令我很納悶

但是 將 dta = 書籍 的那段刪除 卻又完好如初
dim DtA as datatable
'dtA=書籍BindingSource.datasource

datagridview1.datasource=書籍BindingSource
本篇文章回覆於2019-12-03 10:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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