从WPF应用程序

时间:2016-10-19 15:01:19

标签: sql-server wpf

我不确定是否提出这个问题(如果需要我会编辑)。

基本上,我有一个 WPF应用程序。在应用程序中是 DataGrid ,它绑定到 SQL表(通过数据集)。

此表中的一栏是“注意事项”。我创建的列是为了添加/删除可能会或可能不会很长的文本。

然后我发现从列中检索到的字符数量仅为50(此处有一个TextBox绑定到该特定列以显示其中的数据) - 因此,在此处仅显示最多50个字符的文本文本框。

经过一些阅读后,我发现列数据类型(当前 VARCHAR )设置为 VARCHAR(50) - 这是有道理的。

然后我将数据类型更改为 VARCHAR(MAX),更新数据集(反映了更改)并再次尝试 - 即使列的长度属性已经过,我得到相同的结果设置为最大值。

我已尝试过此专栏的其他数据类型,例如 TEXT & NVARCHAR(MAX) - 结果重命名为。

我甚至查看了TextBox的Length属性,这似乎没问题(默认情况下设置为0,因此我将其更改为100 - 行为没有变化)。

我真的很难过。应该这样吗?我错过了什么吗?我真的很感激一些见解。

[UPDATE]:

所以我玩了一下。我决定用很长的字符串更新SSMS中的列。然后我用DATALENGTH(column_name)拉了这个列,整个字符串的长度为272。

然后我在应用程序中检查了这一点。返回整个字符串。添加了几个字符以查看会发生什么。

不仅没有添加额外的字符,整个字符串被截断为100的长度。在SSMS中检查也是如此,结果相同。

现在我比以前更迷失了。但至少我知道问题不在于表格或列数据类型&长度。

[我如何阅读/写入数据]:

我的WPF应用程序有一个DataGrid。此DataGrid绑定到从SQL数据库配置的数据集。

当我在DataGrid中加倍一行时,会打开一个新窗口,并使用所选行的数据填充文本框/组合框。

在(新)Window_Loaded事件中,我引用了有问题的DataGrid。

Private Sub Window_Loaded(sender as Object, e As RoutedEventArgs)
    Dim mainWindow = TryCast(Application.Current.Windows.Cast(of Window)().FirstOrDefault(Function(EditAsset) TypeOf EditAsset Is MainWindow), MainWindow)
    Dim dgMainWindow As DataGrid = MainWindow.AssetsDataGrid
    Dim row as Data.DataRowView = DirectCast(dgMainWindow.SelectedItems(0), Data.DataRowView)
    Dim SelectedAssetTableAdapter As retailassetdbDatasetTableAdapters.tableAssetsTableAdapter = New retailassetdbTableAdapters.tableAssetsTableAdapter()
    Dim SelectedAssetDataTable As New retailassetdbDataset.tableAssetsDataTable

    SelectedAssetTableAdapter.FillBySelectedItem(SelectedAssetDataTable, row("Id"), row("assetSerial")

    txtAsseetNotes.Text = SelectedAssetDataTable.Rows.Item(0)("assetNotes")
End Sub

因此,TextBox显示“资产注释”列的信息。

[保存到数据库]:

数据集有一个更新查询来更新特定条目(基于来自DataGrid的id& serial)。

Private Sub btnSaveChanges(sender As Object, e As RoutedEventArgs)
    Dim SelectedAssetTableAdapter As retailassetdbDatasetTableAdapters.tableAssetsTableAdapter = New retailassetdbTableAdapters.tableAssetsTableAdapter()
    Dim SelectedAssetDataTable As New retailassetdbDataset.tableAssetsDataTable
    SelectedAssetTableAdapter.UpdateAsset(txtAssetNotes.Text, assetSerial, assetID)
End Sub

这会将数据保存回数据库。

[编辑]:

以下是一些属性的图片:

  1. TextBox
  2. 表中的列
  3. 数据集中的列
  4. enter image description here

    enter image description here

    enter image description here

1 个答案:

答案 0 :(得分:0)

Ok, so I am feeling like a complete idiot at the moment.

After thinking I have been thorough in trying to determine WHERE the problem lies, I overlooked 1 thing:

THE UPDATE STATEMENT OF THE DATASET!

Even I reconfigured the Dataset with the new properties of the database/table, I left Update Statement as is. So I am thinking the old Update statement was referencing old parameters when doing the update?

Anyway, I created a Test Update Statement on the newly configured Dataset and tried it out. It works!

Thanks to all for the replies.