我有一个DataGridTemplateColumn一列DataGridTemplateColumn,如下所示:
<my:DataGrid Name="dgvSales" RowHeight="23" SelectionUnit="Cell" BeginningEdit="dgvSales_BeginningEdit" AutoGenerateColumns="False" CellEditEnding="dgvSales_CellEditEnding" > <my:DataGrid.Columns> <my:DataGridTemplateColumn Header="Product Name" Width="200"> <my:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Product_Name}"></TextBlock> </DataTemplate> </my:DataGridTemplateColumn.CellTemplate> <my:DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <TextBox x:Name="txtbxProduct" Text="{Binding Product_Name}" TextChanged="txtbxProduct_TextChanged" KeyDown="txtbxProduct_KeyDown"></TextBox> </DataTemplate> </my:DataGridTemplateColumn.CellEditingTemplate> </my:DataGridTemplateColumn> </my:DataGrid.Columns> </my:DataGrid>
当单元格值更改时,我想将一些项目填充到列表视图中,TextChanged事件如下所示:
private void txtbxProduct_TextChanged(object sender,TextChangedEventArgs e) { TextBox tb = (TextBox)sender; if (tb.Text.Trim() != "") { string qry = "select PL.Record_Id as PList_Id,PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type,PL.Purchase_Rate,PL.Selling_Rate,PL.MRP from dbo.Tbl_Product_Master PM join Tbl_Product_List PL on PL.Product_Id=PM.Record_Id join Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PL.Batch_Flag=0 and PM.Is_Del='false'and PM.Is_Active='true' and PM.Product_Name like '%" + tb.Text.Trim() + "%' order by PM.Product_Name "; DataSet ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString,qry); if (ds.Tables[0].Rows.Count > 0) { lstvwProductCode.ItemsSource = ds.Tables[0].DefaultView; lstvwProductCode.Visibility = Visibility.Visible; } else { lstvwProductCode.ItemsSource = null; lstvwProductCode.Visibility = Visibility.Collapsed; } } else { lstvwProductCode.ItemsSource = null; lstvwProductCode.Visibility = Visibility.Collapsed; } }
当用户输入键盘上的向下键时,我想集中在列表视图上,但是当我按下,返回,空格等键时,它不会触发Keydown事件,但是其他键,如字母数字键都可以正常工作.我的keydown事件如下:
private void txtbxProduct_KeyDown(object sender,KeyEventArgs e) { TextBox tb = (TextBox)sender; if (e.Key == Key.Escape) { tb.Clear(); lstvwProductCode.Visibility = Visibility.Collapsed; tb.Focus(); } else if (e.Key == Key.Down) { if (lstvwProductCode.Items.Count > 0) { lstvwProductCode.SelectedIndex = 0; lstvwProductCode.Focus(); lstvwProductCode.Visibility = Visibility.Visible; } } }
我的代码错了什么?
解决方法
而不是使用PreviewKeyDown