none
請問如何使用 gridview 的 TemplateField RRS feed

  • 問題

  • 請問如果我想使用 Gridview 達到以下效果

    即可用 DropDownList 修改數量 , 
    我使用 TemplateField , 再加入 <ItemTemplate> (如下) 
    <asp:TemplateField HeaderText="數量">
                    <ItemTemplate>
                        <asp:DropDownList ID="DropDownList1" runat="server">
                            <asp:ListItem>1</asp:ListItem>
                            <asp:ListItem>2</asp:ListItem>
                            <asp:ListItem>3</asp:ListItem>
                            <asp:ListItem>4</asp:ListItem>
                            <asp:ListItem>5</asp:ListItem>
                        </asp:DropDownList>
                   </ItemTemplate>
                </asp:TemplateField> 

    但不知如何將原於資料來源的資料繫結給 DropDownList  ,

    即需要將原來資料庫的資料帶入 DropDownList , 且將於 DropDownList 修改後的資料 , 再寫回資料庫

    想說是否要用 <%# bind() %> 的方式 , 可是如此 1,2,3 .. 的選項就不見了 ,

    請問應該如何做 ? 謝謝

    2015年12月21日 上午 03:46

解答

  • 您只要將DropDownList控制項的AppendDataBoundItems屬性設定為True, 就可以保留1, 2, 3, ...這些原有的項目了
    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 07:48
  • 你要在GridView 的 RowDataBound 事件上 對該行的DropDownList做DataBinding

    例如:

      protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DropDownList ddl = e.Row.FindControl("ddl") as DropDownList;
                    ddl.DataSource = GetData(); //GetData()從資料庫取得資料
                    ddl.DataBind();
                }
            }

    2015年12月21日 上午 03:58
  • 先在每一列的 DropDownList 中新增好項目,再使用 RowDataBound 事件去設定每一列內的 DropDownList 的 SelectedValue。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 05:28
    版主
  • 如果你的下拉選單內容在每一筆GridView都是固定的,那麼你可以先弄一個Method進行資料的Query,然後把結果放到一個DataTable裡
    ,接著GridView1_RowDataBound只要把DropDownList ddl 的DataSource 指向這個DataTable,然後呼叫ddl.DataBind();,就可以做資料綁定
    ,這樣的好處是你不用每一筆GridView都去call一次DB,效能會比較好

    private DataTable ddlData ;
    protected void Page_Load(object sender, EventArgs e)
    {
      GetData();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
      DropDownList ddl = e.Row.FindControl("ddl") as DropDownList;
      ddl.DataSource = ddlData;
      ddl.DataBind();
     }
    }
    private void GetData()
    {
     //從資料庫取得資料
     //存到DataTable ddlData裡
    }


    微軟免費線上課程

    HTML5 & JavaScript程式開發實戰(MyBook)

    開發ASP.NET您要瞭解的基楚

    http://www.dotblogs.com.tw/ian (MyBlog)

    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 06:03
    版主

所有回覆

  • 你要在GridView 的 RowDataBound 事件上 對該行的DropDownList做DataBinding

    例如:

      protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DropDownList ddl = e.Row.FindControl("ddl") as DropDownList;
                    ddl.DataSource = GetData(); //GetData()從資料庫取得資料
                    ddl.DataBind();
                }
            }

    2015年12月21日 上午 03:58
  • 先在每一列的 DropDownList 中新增好項目,再使用 RowDataBound 事件去設定每一列內的 DropDownList 的 SelectedValue。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 05:28
    版主
  • 如果你的下拉選單內容在每一筆GridView都是固定的,那麼你可以先弄一個Method進行資料的Query,然後把結果放到一個DataTable裡
    ,接著GridView1_RowDataBound只要把DropDownList ddl 的DataSource 指向這個DataTable,然後呼叫ddl.DataBind();,就可以做資料綁定
    ,這樣的好處是你不用每一筆GridView都去call一次DB,效能會比較好

    private DataTable ddlData ;
    protected void Page_Load(object sender, EventArgs e)
    {
      GetData();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
      DropDownList ddl = e.Row.FindControl("ddl") as DropDownList;
      ddl.DataSource = ddlData;
      ddl.DataBind();
     }
    }
    private void GetData()
    {
     //從資料庫取得資料
     //存到DataTable ddlData裡
    }


    微軟免費線上課程

    HTML5 & JavaScript程式開發實戰(MyBook)

    開發ASP.NET您要瞭解的基楚

    http://www.dotblogs.com.tw/ian (MyBlog)

    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 06:03
    版主
  • 您只要將DropDownList控制項的AppendDataBoundItems屬性設定為True, 就可以保留1, 2, 3, ...這些原有的項目了
    • 已標示為解答 MIS110 2015年12月21日 上午 09:06
    2015年12月21日 上午 07:48
  • 感謝各位高手的協助 , 根據大家的資訊我終於試出來啦 !! 謝謝 ^_^
    2015年12月21日 上午 09:07