0

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;
        }
    }

それも私を助けません

4

0 に答える 0