none
使用GridView, 當按下編輯按鈕時,出現CheckBox RRS feed

  • 問題

  • 我有3個按鈕,分別是「所有訂購商品」、「以出貨商品」與「未出貨商品」。只有按下「所有訂購商品」的按鈕,GridView才會出現Edit的按鈕。按下Edit時,該行就出現可供點選的CheckBox. 

    想法是.asxp頁面的CheckBoxField的Visible為False, 所以需要以程式碼將CheckBox的Visible屬性改為True.

    GridView的RowCommand事件:

    protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
     {
      if (e.CommandName == "Edit")
      {
       int yy = Convert.ToInt32(e.CommandArgument); 
       
       ((CheckBox)GridView2.Rows[yy].Cells[2].Controls[0] as CheckBox).Visible = true;
      }
     }
    

    可是按下Edit後,還是沒有出現CheckBox.

    我在想是不是寫錯事件了?也有寫在其他事件內,但還是沒有出現CheckBox.

    有寫以下的程式碼,看看cell有沒有寫錯

     bool aaaa = ((CheckBox)GridView2.Rows[yy].Cells[2].Controls[0] as CheckBox).Checked;

    因為aaaa的值並無錯誤,所以Cells[2]是沒錯的。

    所以想問各位如何解決這問題?

    • 已移動 Bill ChungMVP 2011年1月1日 下午 04:00 ASP.NET相關問題 (從:Visual Studio一般討論區(General))
    2011年1月1日 上午 08:33

解答

所有回覆

  • 移文至 ASP.NET 與 AJAX

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年1月1日 下午 04:00
  • hi, 能請問一下您的aspx怎麼寫的嘛?

    麻煩您貼上來..


    常用資源參考:
    小弟的blog: In 91
    2011年1月1日 下午 04:09
    版主
  • 三個按鈕:

    <asp:Button ID="Button1" runat="server" Text="所有訂購商品" OnClick="Button1_Click" />
    <asp:Button ID="Button2" runat="server" Text="以出貨商品" OnClick="Button2_Click" />
    <asp:Button ID="Button3" runat="server" Text="未出貨商品" OnClick="Button3_Click" />

    GridView

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderID"
    	DataSourceID="SqlDataSource1" PageSize="5" AutoGenerateEditButton="True" OnLoad="GridView2_Load"
    	OnRowUpdated="GridView2_RowUpdated" OnRowCommand="GridView2_RowCommand" >
    		<Columns>
     <asp:BoundField DataField="OrderID" HeaderText="訂購編號(P.K)" ReadOnly="True" SortExpression="OrderID" />
     <asp:CheckBoxField DataField="Completed" HeaderText="是否已出貨" SortExpression="Completed"
             Visible="False" />
     <asp:BoundField DataField="ProductName" HeaderText="商品名" SortExpression="ProductName"
             ReadOnly="True" />
     <asp:BoundField DataField="Quantity" HeaderText="數量" SortExpression="Quantity" ReadOnly="True" />
     <asp:BoundField DataField="UnitCost" HeaderText="單價" SortExpression="UnitCost" DataFormatString="{0:C0}"
             ReadOnly="True" />
     <asp:BoundField DataField="Subtotal" HeaderText="總價" SortExpression="Subtotal" DataFormatString="{0:C0}"
             ReadOnly="True" />
     <asp:BoundField DataField="CustomerName" HeaderText="收件者" SortExpression="CustomerName"
             ReadOnly="True" />
     <asp:BoundField DataField="DateShipped" HeaderText="訂購日期" SortExpression="DateShipped"
             ReadOnly="True" />
     <asp:BoundField DataField="CustomerPhone" HeaderText="電話" SortExpression="CustomerPhone"
             ReadOnly="True" />
     <asp:BoundField DataField="ShippingAddress" HeaderText="地址" SortExpression="ShippingAddress"
             ReadOnly="True" />
     <asp:BoundField DataField="Comments" HeaderText="備註" SortExpression="Comments" ReadOnly="True" />
            </Columns>
     </asp:GridView>

    這是我的asxp頁的Code. 更新CheckBoxField的程式碼我寫在GridView2_RowUpdated. 

    只有按「所有訂購商品」,才可以更新CheckBox. 按「以出貨商品」或「未出貨商品」時,不能更新CheckBox. 

    因此在Button1的Code, AutoGenerateEditButton是True的,其他2個是False. 如此一來,只有在按「所有訂購商品」,在按Edit,才可以更新CheckBox的目標算是達成了,但事與願違,按下Edit後在按「以出貨商品」或「未出貨商品」時,還是可以更新CheckBox. 這跟預期有點落差。

    所以想只有在「Edit」的狀態下,進行對CheckBox的更新。然後就衍生出第1篇的程式碼,但沒有預期的結果,停頓很多天,因此想來求助各位。

    2011年1月2日 上午 03:12
  • hi,
    請問您有試過把CheckBoxField改成用TemplateField,然後使用EditTemplate搭配RowCommand去控制嗎?這樣就只有RowCommand對了,才會顯示EditTemplate的內容。

    我是比較少用內建的AutoGenerateEditButton跟CheckBoxField,不過應該可行才是。

     

     


    常用資源參考:
    小弟的blog: In 91
    2011年1月2日 上午 04:15
    版主
  • 您可以將CheckBox放在GridView的EditItemTemplate中, 按下Edit鍵就會自動出現, 不需要透過程式碼控制
    2011年1月2日 上午 08:59
  • 你的設計還真奇怪,GridView是用表格在呈現的,你只要其中一個CheckBox出來,其它繼續保持看不到的狀態,這樣表格不就全亂了嗎?

    通常CheckBoxField.Visible會設為true, 只控制CheckBox的Enable屬性

    2011年1月3日 上午 02:24
    版主
  • Remove {Visible="False" } from your checkboxfield, then it is already done.

     

    <asp:CheckBoxField DataField="Completed" HeaderText="是否已出貨" SortExpression="Completed"/>


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年1月5日 上午 03:55
  • Hi 天竺鼠  :

    你的問題已經找到方向了嗎?


    學生們一定要試試,不是學生的也大家告訴大家,一起為台灣加油!

    2011年1月6日 上午 01:30
    版主
  • 解決這問題了。我用圖來說明遇到的問題。

    圖1:

     

    圖2:

    最大的問題就是狀態會被帶進以出貨及未出貨的按鈕。然後我就想的很複雜,然後解釋也沒有很清楚。

    後來用中斷點看有什麼GridView的Value可用的?發現GridView2.EditIndex的Value很有趣。

    所以在「以出貨商品」與「未出貨商品」的Click事件打上GridView2.EditIndex = -1; 

    這樣就在「以出貨商品」與「未出貨商品」頁面就不能編輯狀態了。

    在這邊還是要感謝各位的回覆幫助。

    2011年1月7日 下午 02:11
  • Hi 天竺鼠:

    謝謝你回覆你自己解決的過程結果。


    學生們一定要試試,不是學生的也大家告訴大家,一起為台灣加油!

    2011年1月10日 上午 01:48
    版主