Динамическое изменение Combobox на TextBox в сетке данных внутри шаблона редактирования ячеек в silverlight 4 - PullRequest
1 голос
/ 19 марта 2011

Я делаю приложение в Silverlight 4. Я столкнулся с проблемой, мне нужно программно изменить конкретный комбинированный список в текстовое поле при изменении значения определенного столбца (с помощью комбинированного списка) той же строки. Мне нужно изменить этоon event cellEditEnded.

Обратите внимание, что мне нужно изменить текстовый блок celleditingtemplate на текстовое поле, а не на текстовый блок celltemplate.

Это мой столбец, в котором мне нужно принять решение о выбранном значении его поля со списком.

<sdk:DataGridTemplateColumn  Header="Instruction Type" 
    CanUserResize="False" CanUserReorder="False">
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <TextBlock  Margin="2" Text="{Binding operationType}" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
    <sdk:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox   x:Name="instruction" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>

Этот поле со списком столбца необходимо изменить на текстовое поле здесь:

<sdk:DataGridTemplateColumn Header="Destination">
    <sdk:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Margin="2" Text="{Binding destination}" />
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellTemplate>
    <sdk:DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox  x:Name="destination"/>
        </DataTemplate>
    </sdk:DataGridTemplateColumn.CellEditingTemplate>
</sdk:DataGridTemplateColumn>

C # код:

public class Instruction
{
    public string operationType { get; set; }
    public string destination { get; set; }
}

private void myGrid_CellEditEnded(object sender, DataGridCellEditEndedEventArgs e)
{
    DataGrid obj = (DataGrid)sender;
    Instruction obj1 = (Instruction)obj.SelectedItem;

    if (e.Column.Header.ToString() == "Instruction Type")
    {
        if (obj1.operationType == "ADD" || obj1.operationType == "SUB")
        {
            // Here I need Require Code ????/
        } 
    }
}

Я жду любого Гения, который поможет мне ..

1 Ответ

2 голосов
/ 19 марта 2011

Вот рабочий пример http://anzensoft.smtp.ru/FlashKiller2/DataGridTrickTestPage.html

А вот и исходный код http://cid -a1de71e9f2ae2f82.office.live.com / self.aspx / .Public / DataGridTrick.zip

xaml код


<Grid x:Name="LayoutRoot" Background="White">
    <sdk:DataGrid x:Name="dataGrid1" AutoGenerateColumns="False" 
                  PreparingCellForEdit="dataGrid1_PreparingCellForEdit">
        <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn Header="Instruction Type">
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock  Margin="2" Text="{Binding operationType}" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="instruction" 
                                  SelectedValue="{Binding operationType, Mode=TwoWay}">
                            <s:String>ADD</s:String>
                            <s:String>MUL</s:String>
                        </ComboBox>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellEditingTemplate>
            </sdk:DataGridTemplateColumn>
            <sdk:DataGridTemplateColumn Header="Destination">
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Margin="2" Text="{Binding destination}" />
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
                <sdk:DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <Grid>
                            <ComboBox x:Name="destinationComboBox" 
                                      SelectedValue="{Binding destination, Mode=TwoWay}">
                                <s:String>sdas</s:String>
                                <s:String>dasdasdasd</s:String>
                            </ComboBox>
                            <TextBox x:Name="destinationTextBox" 
                                     Text="{Binding destination, Mode=TwoWay}" 
                                     Visibility="Collapsed"/>
                        </Grid>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellEditingTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>
    </sdk:DataGrid>
</Grid>

C # код


namespace DataGridTrick
{
public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        dataGrid1.ItemsSource = new List<Instruction>()
        {
            new Instruction(){operationType = "ADD", destination ="sdas"},
            new Instruction(){operationType = "ADD", destination = "dasdasdasd"}
         };
    }

    private void dataGrid1_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
    {
        if ((string)e.Column.Header == "Destination")
        {
            var tb = e.EditingElement.FindName("destinationTextBox") as TextBox;
            var cb = e.EditingElement.FindName("destinationComboBox") as ComboBox;
            var instruction = e.EditingElement.DataContext as Instruction;

            if (tb == null || cb == null || instruction == null)
            {
                throw new 
                Exception("Something wrong here.. this dosen't have to happen!!");
            }
            else
            {
                if (instruction.operationType == "MUL")
                {
                    tb.DataContext = e.EditingElement.DataContext;
                    cb.DataContext = null;

                    tb.Visibility = System.Windows.Visibility.Visible;
                    cb.Visibility = System.Windows.Visibility.Collapsed;
                }
                else
                {
                    tb.DataContext = null;
                    cb.DataContext = e.EditingElement.DataContext;

                    tb.Visibility = System.Windows.Visibility.Collapsed;
                    cb.Visibility = System.Windows.Visibility.Visible;
                }
            }
        }
    }
}

public class Instruction
{
    public string operationType { get; set; }
    public string destination { get; set; }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...