使用datareader和导航记录

时间:2013-12-20 08:41:32

标签: vb.net winforms ado.net

我有一个像节点一样的树视图 桌面 笔记本电脑 打印机等...

我编写代码来获取每个基于点击上述节点(桌面,笔记本电脑等)的记录。 代码:

Private Sub tvMenu_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvMenu.AfterSelect
'The event handler for clicking a node in the treeview
    If tpDeviceStore.Focus Then
        desktop()
        notebooks()
    End If
 End Sub

'一个节点的示例以及如何从Dbase检索记录

Private Sub desktop()

    If tvMenu.SelectedNode.Name = "ndDesktop" Then
        Dim con As New clsGlobals
        con.cnn.Open()
        Dim str1 As String = "select * from DeviceLogger where devType='Desktop' order by devSN desc"
        Dim cmd1 As New SqlCommand(str1, con.cnn)
        Dim dr As SqlDataReader = cmd1.ExecuteReader()
        While dr.Read()
            txtDT.Text = dr("devType").ToString
            txtMF.Text = dr("devManufacture").ToString
            txtMod.Text = dr("devModel").ToString
            txtSN.Text = dr("devSN").ToString
            txtRD.Text = dr("devRecieveDte").ToString
            txtST.Text = dr("devStatus").ToString
        End While
        DV = New DataView(DS.Tables("Devicelogger"))
        CM = CType(Me.BindingContext(DV), CurrencyManager)
        dr.Close()
        con.cnn.Close()
    Else
        txtDT.Text = String.Empty
        txtMF.Text = String.Empty
        txtMod.Text = String.Empty
        txtSN.Text = String.Empty
        txtRD.Text = String.Empty
        txtST.Text = String.Empty

        Exit Sub
    End If
End Sub

我想要在检索记录时,我的第一个,上一个,下一个和最后一个按钮应该导航字段。 感谢所有人提前帮助......

1 个答案:

答案 0 :(得分:0)

由于您希望能够导航记录,我建议您利用数据绑定和CurrencyManager。现在,你将不得不采取我的解决方案并将其融入你的代码中(因为我真的不是VB.NET程序员),但我会给你一个例子。您要做的第一件事是设置数据绑定:

txtDT.DataBindings.Add("Text", _dataContext, "{FieldName}")

其中{FieldName}_dataContext中的一个字段。此处_dataContext将被定义为field in the class,如下所示:

private DataTable _dataContext;

接下来我们要做的就是加载数据。我们只使用SqlDataReader Fill而不是使用DataTable,以便CurrencyManager可以完成其余工作。获取数据的代码可能如下所示:

var sql = "select * from DeviceLogger where devType='Desktop' order by devSN desc";
using (SqlConnection c = new SqlConnection(connString))
{
    c.Open();

    using (SqlCommand cmd = new SqlCommand(sql, c);
    {
        _dataContext = new DataTable();
        _dataContext.Load(cmd.ExecuteReader());
    }
}

_currencyManager = (CurrencyManager)this.BindingContext[_dataContext];
_currencyManager.Position = 0

其中_currencyManager也是一个像这样定义的私有类字段:

private CurrencyManager _currencyManager;

现在,当您单击下一个按钮时,您可以执行以下操作:

var nxt = _currencyManager.Position + 1;
var cnt = _currencyManager.Count;

_currencyManager.Position = (nxt >= cnt) ? cnt : nxt;

并且数据绑定文本框中的数据将自动更改。前一个可能看起来像这样:

var prev = _currencyManager.Position - 1;
_currencyManager.Position = (prev < 0) ? 0 : prev;

现在,如果_dataContext对于不同的数据集看起来有点不同,那很好,您只需再次绑定控件数据,以便它们匹配_dataContext CurrencyManager }。无论如何,这是在数据列表中来回移动的最直接的方式,而控件会改变它们的值。