none
關於TableAdapter的Query問題 RRS feed

  • 問題

  •  請問一下
    我在使用TableAdapter時發現,如果我在主查詢select所有欄位,再另外新增一個只select部分欄位的B query,當我在執行B query的時候Gridview的顯示上還是會把所有欄位顯現出來(也就是主查詢內所select的欄位都會出現),而只有B query select的欄位才有值....
    請問該怎麼處理才會在執行B query時,只顯現B query 所select的欄位而已呢??

    請各位不吝指教  謝謝
    • 已移動 Lolota Lee 2009年2月17日 上午 08:58 ASP.NET類型的問題 (从 Visual C# 移动到 ASP.NET 與 AJAX(ASP.NET and AJAX))
    2009年2月16日 上午 06:27

解答

  • 抱歉, 在仔細看完您的說明後, 我發現我先前的回答誤解了您的意思.

    當您使用TableAdapter時, 不管您SQL語法如何下, 回傳的Table欄位都是固定的, 所以如果要依照您的需求, 建議您用ADO.NET去實作.
    然後透過選取AutoGenerateColumns屬性, 讓GridView自動幫您產生欄位.


    另外建議您命名TableAdapter時, 盡量以英文名稱為主, 這樣可以避免一些問題產生.
    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已提議為解答 Lolota Lee 2009年2月19日 上午 02:19
    • 已標示為解答 Lolota Lee 2009年2月20日 上午 07:37
    2009年2月17日 上午 08:56

所有回覆

  • HI,

    假設建立B QUERY時產生名稱為BQUERY的方法, 您可以呼叫:
    TableAdapter物件.BQUERY(如果需要參數);

    tihs
    2009年2月17日 上午 03:18
  • 你的GridView應該要採用自動產生欄位的方式來處理,這樣就能根據你的語法來幫你產生欄位,而不是產生全部。



    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已提議為解答 Lolota Lee 2009年2月17日 上午 03:50
    • 已取消提議為解答 Lolota Lee 2009年2月17日 上午 08:51
    2009年2月17日 上午 03:50
  • Dear tihs 你好
    我把程式貼上來可能比較清楚
    以下為呼叫主查詢的程式
    1 //主查詢Select所有欄位  
    2 DataSet1TableAdapters.產品類別TableAdapter adapter = new WebApplication1.DataSet1TableAdapters.產品類別TableAdapter();  
    3 //Diffgv為GridView 的ID 
    //SQL為SELECT 類別編號, 類別名稱, 說明, 圖片 FROM dbo.產品類別 
    4 Diffgv.DataSource = adapter.GetData();  
    5 Diffgv.DataBind(); 
    而B查詢寫法一樣,只是select的欄位比較少

    1 int id = 1;  
    2 DataSet1TableAdapters.產品類別TableAdapter adapterB = new WebApplication1.DataSet1TableAdapters.產品類別TableAdapter();  
    3 //SQL為  
    4 //SELECT         類別編號, 類別名稱  
    5 //FROM             產品類別  
    6 //WHERE         (類別編號 = @類別編號)  
    7 Diffgv.DataSource = adapterB.GetDataByID(id);  
    8 Diffgv.DataBind(); 
    但是在GridView的顯示上還是會出現主查詢有Select的欄位(多了"說明"與"圖片"兩個欄位)
    而請問Geek.Lee大大指的自動產生欄位指的是Gridview內的屬性"AutoGenerateColumns"嗎??
    如果是的話他預設就是true了
    如果有誤解的地方敬請指教  謝謝
    2009年2月17日 上午 06:15
  • 抱歉, 在仔細看完您的說明後, 我發現我先前的回答誤解了您的意思.

    當您使用TableAdapter時, 不管您SQL語法如何下, 回傳的Table欄位都是固定的, 所以如果要依照您的需求, 建議您用ADO.NET去實作.
    然後透過選取AutoGenerateColumns屬性, 讓GridView自動幫您產生欄位.


    另外建議您命名TableAdapter時, 盡量以英文名稱為主, 這樣可以避免一些問題產生.
    微軟技術支援中心(CSS) - http://twitter.com/msdn_taiwan
    • 已提議為解答 Lolota Lee 2009年2月19日 上午 02:19
    • 已標示為解答 Lolota Lee 2009年2月20日 上午 07:37
    2009年2月17日 上午 08:56
  • HI,

    如果兩個查詢的欄位數目不同, 請不要透過網頁設計畫面設定GridView控制項的資料來源(即DataSource屬性), 直接由您的程式設定GridView控制項的DataSource屬性即可

    tihs
    2009年2月18日 上午 01:33
  • to tihs 你好:
        我並沒有在網頁設計畫面設定GridView控制項的資料來源
    我對GridView的操作就只有在程式裡的那兩行
    Diffgv.DataSource = adapterB.GetDataByID(id);  
    Diffgv.DataBind();

    所以我的資料來源不是從設計畫面設定而來的 
    有沒有可能如Geek.Lee大大所說 這是在TableAdapter內的限制呢??
    謝謝你們的回覆
    2009年2月18日 上午 07:07
  • HI,

    因為您用的是強型態的類別, 所以會發生錯誤, 建議將程式改成這樣:
    DataSet1TableAdapters.產品類別TableAdapter adapter new DataSet1TableAdapters.產品類別TableAdapter adapter();  
     
    DataSet1 ds=new DataSet1();  
    ds.EnforceConstraints=false;  
     
    adapter.FillByID((DataSet1.產品類別TableAdapter)ds.Tables[0], id);  
    GridView1.DataSource = ds.Tables[0];   
    GridView1.DataBind();  
     

    還有要將GridView的AutoGenerateColumn屬性設定為True, 大概就可以了

    tihs
    2009年2月19日 上午 02:35