在silverlight 4中的单元格编辑模板中的数据网格中动态更改Combobox到TextBox

时间:2011-03-19 09:33:08

标签: silverlight-4.0

我正在Silverlight 4中创建一个应用程序。我遇到了一个问题,当需要更改同一行的特定列值(使用组合框)时,我需要以编程方式将特定组合框更改为文本框。我需要更改此在事件cellEditEnded。

请注意,我需要将celleditingtemplate组合框更改为textbox而不是celltemplate textblock。

这是我的专栏,我需要决定其组合框的选择值。

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

此列comboBox需要在此处更改为文本框:

<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 个答案:

答案 0 :(得分:2)

以下是一个工作示例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; }
}
}
相关问题