none
dataform里怎么指定ComboBox 的首选项??? RRS feed

  • 问题

  • dataform里怎么指定ComboBox 的首选项???

    我用cb.SelectedIndex = 0; //这里出错提示:指定的参数已超出有效值的

     

    前台:       
    <toolkit:DataForm HorizontalAlignment="Left" Name="dataForm1" VerticalAlignment="Top" Height="161" Width="378" ContentLoaded="dataForm1_ContentLoaded">
    <toolkit:DataForm.EditTemplate>
    <DataTemplate>
    <StackPanel>
    <toolkit:DataField Label="事业部名称*">
    <ComboBox Margin="3"  Name="cbUnit" SelectionChanged="cbUnit_SelectionChanged" />
    </toolkit:DataField>
    <toolkit:DataField Label="部门名称*">
    <TextBox Margin="3" Text="{Binding DepartmentName, Mode=TwoWay,NotifyOnValidationError=True,  ValidatesOnExceptions=True }" Name="texDepartmentName" />
    </toolkit:DataField>
    </StackPanel>
    </DataTemplate>
    </toolkit:DataForm.EditTemplate>
    </toolkit:DataForm>

     

    后台:
    namespace TopXinZi.Views
    {
            public partial class Department_add : ChildWindow
            {

                   public Department cw_Department;
                    XinZiDomainContext ds = new XinZiDomainContext();
                    public Department NewDepartment { get; set; }

            public Department_add()
            {
                    InitializeComponent();
                    NewDepartment = new Department();
                    dataForm1.CurrentItem = NewDepartment;
                    dataForm1.BeginEdit();

            }

            private void OKButton_Click(object sender, RoutedEventArgs e)
            {

                    this.DialogResult = true;
    }

            private void CancelButton_Click(object sender, RoutedEventArgs e)
            {

                    this.DialogResult = false;
    }

            // ComboBox控件绑定数据源
            private void dataForm1_ContentLoaded(object sender, DataFormContentLoadEventArgs e)
            {
                    ComboBox cb = (ComboBox)(dataForm1.FindNameInContent("cbUnit"));  

                    cb.ItemsSource = ds.BusinessUnits;
                    cb.DisplayMemberPath = "UnitName";
                    ds.Load(ds.GetBusinessUnitQuery());
                    cb.SelectedIndex = 0;//这里出错提示:指定的参数已超出有效值的范围。
    }

            private void cbUnit_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {

                //
            }
    }
    }

    2010年7月11日 10:19

答案

  • 你好,

         ds.Load是一个 异步的执行。

         在你设置cb.SelectedIndex = 0的时候,不能保证数据已经取回了。

         你可以给load方法设置一个Complete事件,在完成事件中执行这个。

    • 已标记为答案 xmf16 2010年7月13日 7:06
    • 取消答案标记 xmf16 2010年7月13日 9:15
    • 已标记为答案 xmf16 2010年7月14日 2:27
    2010年7月13日 5:18

全部回复

  • 你好,

         ds.Load是一个 异步的执行。

         在你设置cb.SelectedIndex = 0的时候,不能保证数据已经取回了。

         你可以给load方法设置一个Complete事件,在完成事件中执行这个。

    • 已标记为答案 xmf16 2010年7月13日 7:06
    • 取消答案标记 xmf16 2010年7月13日 9:15
    • 已标记为答案 xmf16 2010年7月14日 2:27
    2010年7月13日 5:18
  • 我在load方法设置一个Complete事件,又出现新问题,请问如何修改代码呢?

    //在dataForm内容加载事件找到cb控件
    private void dataForm1_ContentLoaded(object sender, DataFormContentLoadEventArgs e)
    {

    ComboBox cb = (ComboBox)(dataForm1.FindNameInContent("cbUnit"));
    cb.ItemsSource = ds.BusinessUnits;
    cb.DisplayMemberPath = "UnitName"
    ds.Load<BusinessUnit>(ds.GetBusinessUnitQuery(), Home_Completed, false);

    }

    void Home_Completed(LoadOperation lo)
    {
    ComboBox cb = (ComboBox)(dataForm1.FindNameInContent("cbUnit"));
    cb.SelectedIndex = 0;//这里设定后,后面不管ComboBox 的SelectionChanged事件如何变化,cb.SelectedIndex始终等于0,请问这里如何修改呢?
    }

    • 已编辑 xmf16 2010年7月13日 9:23 还要修改
    • 已标记为答案 xmf16 2010年7月14日 2:27
    • 取消答案标记 xmf16 2010年7月14日 2:27
    2010年7月13日 9:19