当数据集为空时,在WPF数据网格中显示空白行
本文关键字:网格 数据网 显示 空白 数据 WPF 数据集 | 更新日期: 2023-09-27 18:15:57
我正在运行SQL Server 2008数据库上的SQL查询。该查询的结果显示在WPF DataGrid中。我的代码工作得很好,除了当数据集是空的。我希望用户能够添加新行,但是当数据集为空时,没有可供用户输入数据的空行。下面是我的代码:
try
{
string accountQuery = "SELECT a.AccountName AS 'Account Name', a.AccountDesc AS 'Account Description', " +
"a.AccountNumber AS 'Account #', b.AccountType AS 'Account Type', c.AccountName AS 'Account Parent' " +
"FROM Accounts AS a INNER JOIN AccountType AS b ON a.AccountTypeID = b.AccountTypeID " +
"LEFT OUTER JOIN Accounts AS c ON c.AccountID = a.AccountParentID " +
"WHERE a.UserID = " + currentUserID;
SqlDataReader accounts = null;
SqlCommand query = new SqlCommand(accountQuery, dbConnection);
accounts = query.ExecuteReader();
DataTable accountsTable = new DataTable();
accountsTable.Load(accounts);
this.GridAccounts.ItemsSource = accountsTable.DefaultView;
accounts.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
// Close the DB if there was an error.
if (dbConnection.State == ConnectionState.Open)
dbConnection.Close();
}
如果有人可以帮助我得到这个空行,以便用户可以输入数据,我将非常感激!
谢谢!
也许你可以先检查一下源代码。如果你从数据库获得的源是空的,那么你将添加一个新的行到GridView。
我刚刚开始理解这个,但这到目前为止是有效的。
<DataGrid CanUserAddRows="True" CanUserDeleteRows="True" ItemsSource="{Binding UserAlerts}" IsSynchronizedWithCurrentItem="True" x:Name="UserAlertsGrid">
<DataGrid.Columns>
<DataGridTextColumn Header="Node ID" Binding="{Binding Node_id}"></DataGridTextColumn>
<DataGridTextColumn Header="Threshold" Binding="{Binding Threshold}"></DataGridTextColumn>
<DataGridTextColumn Header="Type of Alert" Binding="{Binding TypeOfAlert}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
然后让'CanUserAddRows'工作,你需要一个默认的构造函数在你的ViewModel(在那里你做绑定)。如果没有默认构造函数,则不会得到空行。
class UserAlertViewModel : BaseViewModel
{
private readonly UserAlert _alertItem;
public UserAlertViewModel()
{
_alertItem = new UserAlert();
}
public UserAlertViewModel(UserAlert alertItem)
{
_alertItem = alertItem;
}
public int Node_id
{
get { return _alertItem.Node_id; }
set { _alertItem.Node_id = value; OnPropertyChanged("Node_id"); }
}
public double Threshold
{
get { return _alertItem.Threshold; }
set { _alertItem.Threshold = value; OnPropertyChanged("Threshold"); }
}
public string TypeOfAlert
{
get { return _alertItem.TypeOfAlert; }
set { _alertItem.TypeOfAlert = value; OnPropertyChanged("TypeOfAlert"); }
}
}
在实际的窗口中,你必须为DataGrid设置DataContext
public UserAlertWindow()
{
InitializeComponent();
this.DataContext = new ViewModel.UserAlertWindowViewModel();
UserAlertsGrid.DataContext = new ViewModel.UserAlertWindowViewModel(this);
}
并且当用户编辑或删除时更新数据库,检查这个链接,它看起来很有希望。http://www.dotnetcurry.com/ShowArticle.aspx?ID=566
尝试设置CanUserAddRows
为DataGrid
的true
使用ListCollectionView
作为源代码:
datagrid.CanUserAddRows = true;
datagrid.ItemsSource = new ListCollectionView(items_list);
,然后下面的函数添加空行,如果没有出现:
public void AddNewRow()
{
if (datagrid.Items is System.ComponentModel.IEditableCollectionViewAddNewItem items)
{
if (!items.IsAddingNew)
{
items.AddNew();
}
}
}