我是C#和WPF的新手。假设我有一张桌子。该表有两个字段:" firstName"和" birthDate"。我写了一个查询来获取"出生日"记录,然后我想在数据网格上显示它。但在此之前,我想改变"格里高利日期"到" jalali约会"有功能。
在C#中:
var searchQueryOfDateAndTime = (from b in FaceDB.tblCameras
join c in FaceDB.tblTraffics
on b.Camera_Id equals c.Camera_Id
join a in FaceDB.tblknownPeoples
on c.IdNumber equals a.IdNumber
where
(
string.Compare(c.EntryDate.ToString(), miladiFromDate.ToString()) >= 0
&&
string.Compare(c.EntryDate.ToString(), miladiToDate.ToString()) <= 0
)
where
(
string.IsNullOrEmpty(timFromHour.Text.ToString())
||
string.Compare(c.EntryTime.ToString(), timFromHour.Text.ToString()) >= 0
&&
string.IsNullOrEmpty(timToHour.Text.ToString())
||
string.Compare(c.ExitTime.ToString(), timToHour.Text.ToString()) <= 0
)
select new { a.Name, a.Family, EntryDate = Georgian2Jalali(c.EntryDate), c.EntryTime, a.Occupation, ExitDate = Georgian2Jalali(c.ExitDate), c.ExitTime, b.Camera_Name, c.PicAddress, a.FirstPicAddress, c.IdNumber, c.Camera_Id }).ToList();
dgvFinalyReport.ItemsSource = searchQueryOfDateAndTime;
并在WPF中:
<DataGrid x:Name="dgvFinalyReport" Height="431" Width="630" Canvas.Left="273" Canvas.Top="10" AutoGenerateColumns="False" CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="firstname" Binding="{Binding Name}" Width="78" />
<DataGridTextColumn Header="Last name" Binding="{Binding Family}" Width="78" />
<DataGridTextColumn Header="Entry date" Binding="{Binding EntryDate}" Width="78" />
<DataGridTextColumn Header="entry time" Binding="{Binding EntryTime}" Width="78" />
<DataGridTextColumn Header="exit date" Binding="{Binding ExitDate}" Width="78" />
<DataGridTextColumn Header="exit time" Binding="{Binding ExitTime}" Width="78" />
<DataGridTextColumn Header="occupation" Binding="{Binding Occupation}" Width="78" />
<DataGridTextColumn Header="Cam_Name" Binding="{Binding Camera_Name}" Width="78" />
<DataGridTextColumn Header="getface" Binding="{Binding PicAddress}" Width="78" />
<DataGridTextColumn Header="first face" Binding="{Binding FirstPicAddress}" Width="78" />
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
由于new {}
创建了只读匿名类型,因此您无法循环查询并更新birthdate的值。相反,您可以直接更改值:
var query = from f in mydb.mytbl.AsEnumerable()
select new
{
f.firstName,
BirthDate = ConvertToJalali(f.BirthDate)
};
private DateTime ConvertToJalali(DateTime dt)
{
// your implementation here
}
注意:请注意使用AsEnumerable()
,因为它会将数据库中的所有记录拖入内存,但在您的特定情况下,它没有任何区别,因为您没有任何地方子句。
答案 1 :(得分:1)
另一种方法是创建一个转换器,它接受格里高利日期并将其转换为Jalali日期:
<DataGridTextColumn Header="Birth Day"
Binding="{Binding birthDate, Converter={StaticResource JalaliDateConverter}}"
Width="80" />
然后在你的XAML中你有:
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
有关转换器的详细教程,请参阅here。