5 列の Datagrid があります。グリッドのセルの値を列 2 で変更すると、Textbox_changed イベントでいくつかの製品をリストビューに入力したいと考えています。私のxamlは:
<my:DataGrid Name="dgvSales" my:DataGridCell.Selected="DataGrid_GotFocus" RowHeight="23" AlternatingRowBackground="LightGray" SelectionUnit="Cell" BeginningEdit="dgvSales_BeginningEdit" AutoGenerateColumns="False" Margin="13,150,9,117" CellEditEnding="dgvSales_CellEditEnding" SelectionChanged="dgvSales_SelectionChanged" TargetUpdated="dgvSales_TargetUpdated" >
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="ItemID" Visibility="Hidden" Width="0" Binding="{Binding PList_Id}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Code" Width="100" Binding="{Binding Product_Code}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Product Name" Width="200" Binding="{Binding Product_Name,NotifyOnTargetUpdated=False}">
<my:DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<EventSetter Event="TextChanged" Handler="TextBox_TextChanged" />
</Style>
</my:DataGridTextColumn.EditingElementStyle>
</my:DataGridTextColumn>
<my:DataGridTextColumn Header="Purchase Rate" Width="100" Binding="{Binding Purchase_Rate}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Qty" Width="100" Binding="{Binding Qty}"></my:DataGridTextColumn>
<my:DataGridTextColumn Header="Amount" Width="100" Binding="{Binding Amount}"></my:DataGridTextColumn>
</my:DataGrid.Columns>
</my:DataGrid>
私の分離コードは次のとおりです。
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = (TextBox)sender;
if (tb.Text.Trim() != "")
{
string qry = "select PM.Product_Code,PM.Product_Name,PM.Purchase_Rate from dbo.Tbl_Product_Master PM where PM.Product_Name like '%" + tb.Text.Trim() + "%' ";
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;
lstvwProductCode.Focus();
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
私の問題は、セルに何かを入力するとイベントが発生することですが、最初の文字しか取得できず、編集可能にならないためセルに複数の文字を入力できません。編集可能にしてリストビューに入力する方法セル内のテキストに基づいて、これを行う方法
編集
DataGridTemplateColumn も使用しました
<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"></TextBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellEditingTemplate>
</my:DataGridTemplateColumn>
私のイベントは:
private void txtbxProduct_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = (TextBox)sender;
if (tb.Text.Trim() != "")
{
string qry = "select PM.Product_Code,PM.Product_Name,PM.Purchase_Rate from dbo.Tbl_Product_Master PM where PM.Product_Name like '%" + tb.Text.Trim() + "%' ";
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;
lstvwProductCode.Focus();
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
それも私を助けません