【问题标题】:data from datagridview not displayed into textbox (Visual Studio 2010)来自 datagridview 的数据未显示到文本框中(Visual Studio 2010)
【发布时间】:2013-05-15 07:50:56
【问题描述】:

我已经处理了好几个小时了!!!我有 2 种形式:在一种形式(form1)中,我的布局带有文本框等……在另一种形式(datagrid_form2)中,我有一个 datagridview,我在其中选择项目,带有 doubleclickcell 事件,加载到特定的文本框中第一种形式 (form1)。

我在调用 datagrid_form2 的 form1 的文本框旁边有一个按钮,一旦选择了 datagrid_form2 中的元素,form1 的文本框就会加载该值。

  Public Sub data_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles data.CellDoubleClick

    Dim form1panel As New form1

    form1panel.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString

    Debug.WriteLine(form1panel.txtmybox.Text )

    Me.Close()

End Sub

如您所见,我有 cellDoubleclick 事件,该事件应该将所选单元格的值加载到我的 form1 的文本框中,但它不会在文本框(txtmybox)中显示任何内容。在调试中值被正确选择,所以不是代码问题,只是值没有在文本框中传递。

有什么想法吗?提示?

提前致谢

附言我正在使用 Visual Studio 2010 .vb 项目!

【问题讨论】:

    标签: vb.net winforms


    【解决方案1】:

    您似乎在弄乱表格。
    您正在创建 Form1 的新实例,但没有显示它。
    我建议阅读this
    您的问题也类似于this

    编辑: 从您的问题中不清楚您希望如何实现您的要求。 您有一个带有 dataGridView 的表单(我将其命名为 frmDgv)和第二个表单(form1),您想要显示来自您的数据网格的单元格内容。 此表单 (form1) 是否已打开?或者你想每次双击打开一个新的?如果您想在每次需要多个实例或一个模态实例时打开它?
    所以我会尝试包括所有内容:

    ->每次都会打开表单
    frmDgv

    Public Sub data_CellDoubleClick(ByVal sender As Object, ByVal e As      System.Windows.Forms.DataGridViewCellEventArgs) Handles data.CellDoubleClick
    
       Dim f1 as new form1
       f1=DirectCast(mLinkForm1,Form1)
       f1.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString
       'If you want to open a Form1 each time you double click in an cell
        f1.Show 
       'If you want a modal style info
       'f1.ShowDialog
       'f1.Dispose
    End Sub
    

    ->表单已经打开(我不会按照这个)
    frmDgv

       Private mLinkForm1 As Form1
    Public Property LinkForm1 
        Get
            Return mLinkForm1 
        End Get
        Set(value)
            mLinkForm1  = value
        End Set
    End Property
    

    '当您第一次打开此表单时,您将设置:

     Dim f1 as new Form1
     mLinkForm1=f1
     f1.Show
    
    Public Sub data_CellDoubleClick(ByVal sender As Object, ByVal e As      System.Windows.Forms.DataGridViewCellEventArgs) Handles data.CellDoubleClick
       Dim f1 as new form1
       f1=DirectCast(mLinkForm1,Form1)
       f1.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString
    End Sub
    

    Edit 3(我现在没有Visual Studio,所以我的代码没有经过测试)
    Form:datagridview

     Private mLinkForm1 As Form1
       Public Property LinkForm1 
         Get
            Return mLinkForm1 
         End Get
         Set(value)
            mLinkForm1  = value
         End Set
    End Property
    
    Public Sub data_CellDoubleClick(ByVal sender As Object, ByVal e As      System.Windows.Forms.DataGridViewCellEventArgs) Handles data.CellDoubleClick
        LinkForm1.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString
        Me.Close()
    End Sub
    

    表格:Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        datagridview.LinkForm1=Me
        datagridview.Show
    End Sub
    

    试试这个并通知我。

    【讨论】:

    • 您好 Nianos,感谢您的良好回复。事实上,我正在尝试使用公共属性...将变量设置为字符串并返回值,然后设置变量 = texbox.text。对我来说问题是事件(双击单元格).. 假设我在我的表单 1 中声明:Public Property get_values Get Return values End Get Set(ByVal value) values = value End Set End Property 和表单 2 form1panel.get_values = mydata.SelectedCells.Item(0).Value.ToString。即使我设置 get_values = textbox.text 也不起作用
    • 你好 Nianos,其实我想要实现的恰恰相反。我打开了我的 form1(布局和要填充的文本框),在 form1 中(文本框旁边)我有一个按钮来调用我的数据网格(datagrid.show()),一旦单击数据网格中的元素,文本框在form1中填充了datagridview的数据。
    • 好的,你可以使用相同的逻辑。您是否在每次单击按钮时创建一个新的 datagrid 实例(我的意思是表单)(将 datagridForm 作为新的 datagrid - datagridForm.Show),您将其作为模态(将 datagridForm 作为新的 datagrid - datagridForm.ShowDialog)工作,或者您打开实际表单 (datagrid.Show)?如果你回答我的问题,我可以提供类似的解决方案
    • 您好,感谢您的快速回复!我打开实际的表单 (datagrid.show),在 form1 中放置了一个按钮。
    • 好的,但问题是你希望这个表单如何表现?(打开一次,每次打开不同的实例,打开实际的表单?)
    【解决方案2】:

    改变这部分

    form1panel.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString
    

    form1panel.txtmybox.Text = data.CurrentCell.Value
    

    这是字符串值...

    【讨论】:

    • 我做到了,但还是一无所获! :-( 虽然值是正确的(在调试输出中)文本框似乎没有加载值。谢谢!!
    • 它说 3 并且长度也正确。我在所选项目中有 3 个数字。就像没有以正确的方式调用文本框,所以没有加载值。但我不明白的方式?
    • @dromeo:这个问题你想清楚了吗?
    • mmhh 不是真的,因为我认为这不是财产问题。一开始我认为这可能是问题(放置在form1中的文本框的属性)......但现在,我真的认为我没有以正确的方式引用我的文本框。
    • 至少当你检查 txtmybox.len 之前和之后的值不同时,意味着引用是正确的..
    【解决方案3】:

    您需要显示您的子表单:

    Public Sub data_CellDoubleClick(ByVal sender As Object, ByVal e As 
         System.Windows.Forms.DataGridViewCellEventArgs) Handles data.CellDoubleClick
    
        Dim form1panel As New form1
            form1panel.txtmybox.Text = mydata.SelectedCells.Item(0).Value.ToString
            Debug.WriteLine(form1panel.txtmybox.Text)
    
            form1panel.Show();
            //Me.Close()
    
        End Sub
    

    【讨论】:

    • 嗨,skumar,感谢您的回复。我不明白为什么我需要显示子表单,因为一旦我双击 datagridview 的单元格,值应该加载到另一个表单中(在另一个 form1 的文本框中)。无论如何,我尝试了你的建议,但仍然没有!值不显示。这很奇怪!
    猜你喜欢
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多