none
如何給一欄位賦值 RRS feed

  • 問題

  • 表單中有兩個分別代表日期與月份textbox,它們的DataBindings中text分別設定如下:

    Textusedday    Mydata1 - USEDMAIN.USEDDAY

    Textyymm        Mydata1 - USEDMAIN.YYMM

    目的是textyymm不可手動輸入,只能依 textusedday中輸入的值來取,如輸入20061231,textyymm就自動變成0612,代碼是這樣寫的:

        Private Sub Textusedday_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Textusedday.KeyPress
            If e.KeyChar = Chr(13) Then
                Textyymm.Text = Textusedday.Text.Substring(2, 4)
            End If
        End Sub

    在textusedday中輸入20061231按enter鍵後,Textyymm中並不會出現任何值,這時返回到textusedday中再敲一下enter鍵,textyymm中才會出現0612,但是按存檔後,這個欄位的值又不見了.

    這種取欄位中的值或賦值的程式我試過很多都不行,還望前輩們指點.

    2006年12月31日 上午 08:01

解答

  • HI,

    如果存檔後textyymm欄位的內容值不見, 看起來是因為textyymm欄位有設定DataBindings, 但是所繫結到的記錄的YYMM欄位沒有內容值之故, 另外在我的電腦中並不需要按第二次Enter鍵才會生效, 或許您可以先建立一個小專案, 只放兩三個TextBox做實驗, 看看是否正常

    tihs

    2007年1月1日 上午 02:29

所有回覆

  • HI,

    如果存檔後textyymm欄位的內容值不見, 看起來是因為textyymm欄位有設定DataBindings, 但是所繫結到的記錄的YYMM欄位沒有內容值之故, 另外在我的電腦中並不需要按第二次Enter鍵才會生效, 或許您可以先建立一個小專案, 只放兩三個TextBox做實驗, 看看是否正常

    tihs

    2007年1月1日 上午 02:29
  • 謝謝this的回覆!

    在form的load事件中我有如下設定:

    AddHandler dtusedmain.ColumnChanged, New DataColumnChangeEventHandler(AddressOf dtusedmain_ColumnChanged)

    dtusedmain_ColumnChanged代碼如下:

    Private Sub dtusedmain_ColumnChanged(ByVal sender As Object, ByVal args As DataColumnChangeEventArgs)
                args.Row.EndEdit()
    End Sub

    如果把form中的這一句拿掉,textyymm中可以馬上出現相應的值,但是拿掉後,再按存檔時,這些手動輸入進去的資料都不見了,新增的代碼是這樣寫的:

        Private Sub btninsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btninsert.Click

            Dim myNewRow As DataRow = dtusedmain.NewRow()
            dtusedmain.Rows.Add(myNewRow)

            bmusedmain.Position = bmusedmain.Count - 1

            Textusedday.Focus()

        End Sub

    存檔的代碼是這樣寫的:

        Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadd.Click
            Try
                Dim changedDataSet As DataSet = Mydata1.GetChanges
                If changedDataSet Is Nothing Then
                    MessageBox.Show("您並未進行任何變更", "請注意", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

                    usedmainDataAdapter.Fill(Mydata1, "usedmain")
                    Exit Sub
                End If

                usedmainDataAdapter.Update(changedDataSet, "usedmain")

                Mydata1.AcceptChanges()
                MessageBox.Show("已經成功將變更寫回資料來源!", "恭喜您")
            Catch dbcx As DBConcurrencyException

                createMessage(dbcx)
            Catch ex As Exception
                MessageBox.Show("更新失敗" & ex.GetType().ToString(), "infomation", MessageBoxButtons.OK)
            End Try
            usedmainDataAdapter.Fill(Mydata1, "usedmain")


            bmusedmain.Position = Mydata1.USEDMAIN.Rows.Count - 1

        End Sub

    請問該如解決!

    2007年1月2日 上午 08:51
  • HI,

    您的程式在存檔後, 應該可以不需要再呼叫:

    usedmainDataAdapter.Fill(Mydata1, "usedmain")

    tihs

    2007年1月3日 上午 01:38