В моем приложении есть сетка данных и текстовое поле.Я предоставлю номер в текстовом поле, и после нажатия кнопки я хочу, чтобы сетка данных получала данные с данного номера.Источник данных сетки данных - это ObservableCollection.Проблема в том, что сетка данных не обновляется. Когда я нажимаю кнопку.
Я изучаю wpf.У меня есть сетка данных, которая является ObservableCollection.Данные для сетки данных заполняются с помощью SQL-запроса.Привязка к сетке данных работает отлично.Я искал в Интернете и обнаружил, что с помощью linq мы можем искать в коллекции и получать данные, но сетка данных не отражает никаких изменений.
ModelClasstab.Where(d => d.claimnumber == "123456712");
Выше я жестко закодировал данные текстового поля, чтобы проверить, работает ли условие
Window.xaml
<Label Width="69" Height="23.277" HorizontalAlignment="Left" Margin="1,-10,30,0" VerticalAlignment="Top" Content="From Date"/>
<TextBox HorizontalAlignment="Left" Width="113" Height="19.277" Margin="-200,1,-228.962,0" x:Name="txtboxComments"/>
<Button Command="{Binding dataSearch}" Margin="300,-20,30,0" Width="60" Height="23.277" Content="Search"></Button>
<DataGrid x:Name="datagrid" ItemsSource="{Binding ModelClasstab}" AutoGenerateColumns="True" CanUserAddRows="False" Height="350" Width="365" Margin="5" HorizontalAlignment="Left"/>
ViewModel.cs:
public class ViewModel
{
public RelayCommand dataSearch { get; set; }
public ObservableCollection<tabpageAuditInformationModel> ModelClasstab {get; set;}
public ViewModel()
{
FillList();
dataSearch = new RelayCommand(o => Search());
}
public void Search()
{
ModelClasstab.Where(d => d.claimnumber == "123456712");
}
public void FillList()
{
string connectionString = "Data Source=192.168.6.102; Initial Catalog=Operations Productivity Tool;Integrated Security=SSPI;";
string sql = "SELECT distinct Date_Audited as Date , claimNumber as
claimnumber,Audit_id,[Start Time],[End Time],[Total Time] as
[Total_time_taken(Mins)] , [Final Status] as finalstatus " +
" FROM dbo.[opcod Audit Information]" +
//or date = dateadd(day,-1,cast(getdate() as date))) " +"where userName = 'rengar2' ";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand(sql, connection))
{
try
{
adapter = new SqlDataAdapter(command);
ds = new DataSet();
adapter.Fill(ds, "tblCountries");
if (ModelClasstab == null)
ModelClasstab = new ObservableCollection<tabpageAuditInformationModel>();
foreach (DataRow dr in ds.Tables[0].Rows)
{
var month = Convert.ToDateTime(dr[0]).Month;
var year = Convert.ToDateTime(dr[0]).Year;
var day = Convert.ToDateTime(dr[0]).Day;
ModelClasstab.Add(new tabpageAuditInformationModel
{
claimnumber = dr[1].ToString(),
Date = string.Format("{0}/{1}/{2}", month, day, year),
Starttime = dr[3].ToString(),
EndTime = dr[4].ToString(),
TotalTime = dr[5].ToString()
});
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
}
Model.Cs
public class tabpageAuditInformationModel
{
public String Date
{ get; set; }
public String claimnumber
{ get; set; }
public String Starttime
{ get; set; }
public String EndTime
{ get; set; }
public String TotalTime
{ get; set; }
}
Редактировать: после прочтения комментариев я присвоил значение переменной, удалил все элементы в коллекции и добавил в список только выбранные данные.Здесь я не могу запустить два foreach одновременно.Точка останова вообще не входит во второй цикл.Я не уверен в своем подходе.Дайте мне знать, если есть какой-либо лучший подход.
var d1 = ModelClasstab.Where(d => d.claimnumber == "123456712");
foreach (var a1 in ModelClasstab.ToList())
ModelClasstab.Remove(a1);
foreach (var a in d1.ToList())
ModelClasstab.Add(new tabpageAuditInformationModel
{
claimnumber = a.claimnumber,
Date = a.Date,
Starttime = a.Starttime,
EndTime = a.EndTime,
TotalTime = a.TotalTime
});
}