none
如何讀取在gridview 裡dropdownlist的值 RRS feed

  • 問題

  • dear all

     

             如何讀取在gridview 裡dropdownlist的值

             是這樣嗎

             Value=CType(Me.GridView1.Rows(e.RowIndex).Controls(1), DropDownList).SelectedItem.Text

     

             但是我抓不到值...要如何解決ㄋ

             thanks

    2006年10月16日 上午 11:07

解答

  • HI,

    如果您在GridView的RowEditing時加入DropDownList控制項到GridView, 當使用者編輯GridView中的記錄兩次, 不就會加入DropDownList控制項到GridVIew兩次. 您可以利用TemplateField為GridView控制項加入DropDownList, 以避免重覆加入控制項的情形

    tihs

    2006年10月19日 上午 03:27

所有回覆

  • Hi,SIMON

    您參考看看

    如果您是用資料繫結的方式的話要取得"值"的部份可以用

    DataGridView1.SelectedRows(0).Cells(2).Value.ToString

    要取得"值"所對應的文字可以用

    DataGridView1.SelectedRows(0).Cells(2).FormattedValue.ToString

    2006年10月16日 下午 12:12
  • HI,

    如果您是要在GridView的RowUpdating事件中取值的話, 可以這樣做:

    Value=CType(Me.GridView1.Rows(e.RowIndex).Cells(DropDownList控制項欄位的編號)Controls(1),  _

                                        DropDownList).SelectedItem.Text

    tihs

    2006年10月17日 上午 01:50
  • 你好 這是我的code

     Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
         
            Dim QueryString As String
            Dim UniqueId As String
            UniqueId = CStr(CType(Me.GridView1.Rows(e.RowIndex).Cells(1).Controls(0), TextBox).Text)
            QueryString = "SELECT * FROM ius.Configinfo where Id='" & UniqueId & "'"

            Dim cn As New Odbc.OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=Q95050215;Port=3306;Option=131072;Stmt=;Database=ius;Uid=root;Pwd=;")
            Dim adpt As New Odbc.OdbcDataAdapter(QueryString, cn)
            Dim objCmdBuilder As Odbc.OdbcCommandBuilder = New OdbcCommandBuilder(adpt)
            ' cn.Open()
            ' cn.Close()
            Dim ds As New DataSet

            cn.Open()
            adpt.Fill(ds)
         
            ds.Tables(0).Rows(0).Item(0) = CType(Me.GridView1.Rows(e.RowIndex).Cells(1).Controls(0), TextBox).Text
            ds.Tables(0).Rows(0).Item(1) = CType(Me.GridView1.Rows(e.RowIndex).Cells(2).Controls(1), DropDownList).SelectedItem.Text
            ds.Tables(0).Rows(0).Item(2) = CType(Me.GridView1.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
            ds.Tables(0).Rows(0).Item(3) = CInt(CType(Me.GridView1.Rows(e.RowIndex).Cells(4).Controls(1), DropDownList).SelectedItem.Text)

            adpt.Update(ds)
            cn.Close()
          
            ds = Nothing
            adpt = Nothing

            Me.GridView1.EditIndex = -1
            Me.GridView1.DataBind()
        
            ShowDataGrid()


        End Sub

    在這兩行還是會有錯誤 是我哪邊有問提ㄋ

    錯誤內容為 :指定的引數超出有效值的範圍。
    參數名稱: index

    要如何解呢

    thanks in advance

     simon

    2006年10月18日 下午 12:57
  • HI,

    因為出問題的程式碼有多處用到Index, 所以您可能要試驗一下, 先將程式改成:

    Dim s As String = CType(Me.GridView1.Rows(e.RowIndex).Cells(2).Controls(1), DropDownList).SelectedItem.Text

    如果沒有問題, 就是等號右邊的問題, 如果等號右邊有問題, 就要查一下欄位編號是否寫錯? 或是欄位中放的是否是DropDownList控制項了

    tihs

    2006年10月18日 下午 01:43
  • hi

        我試過 是右邊的問題

        但是我想cells(2) 應該也沒錯

         還是databind的問題呢

          我用畫的好了

                                欄位 0      欄位 1       欄位 2         欄位 3         欄位 4       欄位 5 

           row0        更新/取消      id             category      item            deleted      createdtime

           在category裡有個 dropdownlist 讓使用者選取

           我想要讀取使用者選取的值

            是應該這樣寫  CType(Me.GridView1.Rows(e.RowIndex).Cells(2).Controls(1), DropDownList).SelectedItem.Text 嗎?

     

            thanks       SIMON

             

         

                 

     

     


     

    2006年10月19日 上午 12:40
  • Hi

          我想我知道問題了

         在 GridView1_RowEditing 時

           Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
            ShowDataGrid()
            Dim MyDropDownList As DropDownList
            MyDropDownList = New DropDownList()
            Dim MyDropDownList1 As DropDownList
            MyDropDownList1 = New DropDownList()
            Me.GridView1.EditIndex = e.NewEditIndex
            Me.GridView1.DataBind()

            MyDropDownList1 = GetDDL("Category")
            Me.GridView1.Rows(e.NewEditIndex).Cells(2).Controls.Add(MyDropDownList1)
            CType(Me.GridView1.Rows(e.NewEditIndex).Cells(2).Controls(0), TextBox).Visible = False

            MyDropDownList = GetDDL("Deleted")
            Me.GridView1.Rows(e.NewEditIndex).Cells(4).Controls.Add(MyDropDownList)
            CType(Me.GridView1.Rows(e.NewEditIndex).Cells(4).Controls(0), TextBox).Visible = False  

       End Sub

    我這樣加 dropdownlist到 Gridview1 的cells(2) 跟cells(4)

    在最後我用 Me.GridView1.Rows(e.NewEditIndex).Cells(2).Controls.count 的值為2

    但是 後來我到了 GridView1_RowUpdating 裡 我在查

    Me.GridView1.Rows(e.RowIndex).Cells(2).Controls.count 的值 變成 1

    導至 程式執行到 CType(Me.GridView1.Rows(e.RowIndex).Cells(2).Controls(1), DropDownList).SelectedItem.Text

    會有index錯誤

    怎麼會這樣呢

     

    2006年10月19日 上午 01:43
  • HI,

    如果您在GridView的RowEditing時加入DropDownList控制項到GridView, 當使用者編輯GridView中的記錄兩次, 不就會加入DropDownList控制項到GridVIew兩次. 您可以利用TemplateField為GridView控制項加入DropDownList, 以避免重覆加入控制項的情形

    tihs

    2006年10月19日 上午 03:27
  • 可是如果用樣板加入DropDownList控制項會出問題。因為加入DropDownList控制項沒有SelectedValue屬性。在update時會出現錯誤。
    2008年7月23日 上午 02:52
  • 我想你遇到的問題跟我很像

    重點應該是gridview的editing事件是還沒進入編輯模式 (你可以查msdn的定義)

    也就是你看到的control是ItemTemplate下的

    而updating事件則已經進入EditTemplate

    所以你在editing事件處理函式中加入的control其實是加在ItemTemplate

    而updating事件與editing事件是不能共用control

    所以你沒辦法在updating狀態下抓到之前加入的dropdownlist

     

    我看過一篇文章他的作法是在ItemTemplate和EditTemplate各別加入dropdownlist

    然後在EditTemplate裡的dropdownlist指定SelectIndex_change事件處理函式

     

    不知道有沒有給你一點idea, 詳情請查google

    2008年9月2日 下午 11:22