C# 如何从单列datatable加载DataGrid?
我从数据库查询中加载一个单列datatable。然后,我想将datatable分配给datagrid。datatable加载良好,但datagrid未加载。我在其他代码中这样做,效果很好。我不明白为什么它在这里不起作用 XAML代码:C# 如何从单列datatable加载DataGrid?,c#,wpf,datatable,datagrid,C#,Wpf,Datatable,Datagrid,我从数据库查询中加载一个单列datatable。然后,我想将datatable分配给datagrid。datatable加载良好,但datagrid未加载。我在其他代码中这样做,效果很好。我不明白为什么它在这里不起作用 XAML代码: <DataGrid IsReadOnly="True" Name="dtCIDGrid" Background="#FFE8F9FF" HorizontalAlignment="
<DataGrid
IsReadOnly="True"
Name="dtCIDGrid"
Background="#FFE8F9FF"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Height="150"
Margin="24,66,0,0"
Width="240"
BorderThickness="1"
BorderBrush="Black"
>
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger
Property="DataGridCell.IsSelected"
Value="True">
<Setter Property="Background" Value="#FF9DF3D6" />
<Setter Property="Foreground" Value="#000000" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
您试图在何处将
数据表
分配给数据网格
?在代码隐藏中?对不起,我刚刚更新了完整的代码,不确定为什么复制粘贴没有所有内容什么是dtCIDData
?显示声明的位置,是否检查了dtCIDData。DefaultView
有行?我添加了创建数据表的例程#Abin Mathew--dtCIDData.DefaultView有日期,dtCIDGrid.ItemsSource有数据。但是,dtCIDGrid.Columns计数为0。应该是1。我不知道为什么不是。您试图将DataTable
分配给DataGrid
?在代码隐藏中?对不起,我刚刚更新了完整的代码,不确定为什么复制粘贴没有所有内容什么是dtCIDData
?显示声明的位置,是否检查了dtCIDData。DefaultView
有行?我添加了创建数据表的例程#Abin Mathew--dtCIDData.DefaultView有日期,dtCIDGrid.ItemsSource有数据。但是,dtCIDGrid.Columns计数为0。应该是1。我不知道为什么不是。
private void LoadCardIssueDates(string strClientID, SqlConnection sqlConn, string strErrorLogFile)
{
bool blnSuccess = false;
DataTable dtCIDData = new DataTable();
dtCIDData.Columns.Add("Card Issue Date", typeof(string));
blnSuccess = GetCardIssueDates(strClientID, sqlConn, dtCIDData, strErrorLogFile);
}
private bool GetCardIssueDates(string strClientID, SqlConnection sqlConn, DataTable dtCIDData, string strErrorLogFile)
{
string strCardIssueDate = string.Empty;
string[] strDatePieces = new string[3];
DateTime dtCardIssueDate = Convert.ToDateTime("01/01/1900");
bool blnSuccess = false;
if (sqlConn != null && sqlConn.State == ConnectionState.Open)
{
try
{
using (SqlCommand sqlCmd = new SqlCommand("GetCardIssueDates", sqlConn))
{
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.Add("@ClientID", SqlDbType.Char, 36);
// set parameter values that your code will send to the SP as parameter values
sqlCmd.Parameters["@ClientID"].Value = strClientID;
using (SqlDataReader sdrData = sqlCmd.ExecuteReader())
{
while (sdrData.Read())
{
if (sdrData.IsDBNull(0))
{
strCardIssueDate = string.Empty;
}
else
{
dtCardIssueDate = (DateTime)sdrData["issuedate"];
strCardIssueDate = dtCardIssueDate.ToString("MM/dd/yyyy");
}
dtCIDData.Rows.Add(strCardIssueDate);
}
dtCIDGrid.ItemsSource = dtCIDData.DefaultView;
sdrData.Close();
}
sqlCmd.Clone();
sqlCmd.Dispose();
blnSuccess = true;
}
blnSuccess = true;
}
catch (SqlException sqlex)
{
WriteCIDErrorLog("InsertCardIssueDate", sqlex.Message, strErrorLogFile, false);
System.Windows.MessageBox.Show("InsertCardIssueDate: SQL Error, " + sqlex.Message + ", has occurred.");
blnSuccess = false;
}
catch (InvalidOperationException invex)
{
WriteCIDErrorLog("InsertCardIssueDate", invex.Message, strErrorLogFile, false);
System.Windows.MessageBox.Show("InsertCardIssueDate: Invalid Operation Error, " + invex.Message + ", has occurred.");
blnSuccess = false;
}
catch (Exception exQuery)
{
WriteCIDErrorLog("InsertCardIssueDate", exQuery.Message, strErrorLogFile, false);
System.Windows.MessageBox.Show("InsertCardIssueDate: Exception Error, " + exQuery.Message + ", has occurred.");
blnSuccess = false;
}
}
else
{
WriteCIDErrorLog("InsertCardIssueDate", "There is no database connection.", strErrorLogFile, false);
System.Windows.MessageBox.Show("InsertCardIssueDate: There is no database connection.");
}
return blnSuccess;
}