我有menustrip,每个项目都有它的组合框

时间:2015-06-25 04:51:39

标签: c# fill sqldatareader menustrip

我有menustrip,每个项目都有它的组合框。 在运行时,我希望从sql数据库表加载组合。 我尝试过dataadapter但是在运行时所有的组合都是空白的。 请帮我解决这个话题。

2 个答案:

答案 0 :(得分:0)

哼......如果你正在使用支持数据绑定的东西,也许你可以使用类似MVVM的模式。

1.为数据库表构建一个Model,需要一些东西来存储状态。

public class CheckState
{
    public bool IsChecked { get; set; }
    public CheckState(bool isChecked)
    {
        this.IsChecked = isChecked;
    }
}


public class Model
{
    public bool[] CheckStates { get; set; }
}

2.ViewModel应该是这样的。

public class ViewModel : INotifyPropertyChanged //this is important
{

    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private Model model;
    public List<CheckState> checkStates = new List<CheckState>();
    public List<CheckState> CheckStates
    {
        get { return checkStates; }
        set
        {
            checkStates = value;
            RaisePropertyChanged("CheckStates"); //And this is important
        }
    }

    public ViewModel()
    {
        InitializeModel();
    }

    private void InitializeModel()
    {
        //here to retrieve data from your database
        model = new Model
                    {
                        CheckStates = new[] { true, false, true, false }
                    };
        foreach(var stateItem in model.CheckStates)
        {
            this.checkStates.Add(new CheckState(stateItem));
        }
    }
}

3.初始化ViewModel时填写模型的属性。

    public void InitilizeModelData()
    {
        // In gernal, the data comes from database
        var model = new CaculatorModel()
        {
            IsChecked = True,
        };

        IsChecked = model.IsChecked;
    }

4.设置你的用户界面。将checkBox的isChecked属性绑定到ViewModel的IsChecked属性。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = new ViewModel(); //And this is also important
        InitializeComponent();

    }
}

和XML :(请试着弄清楚父亲和孩子之间的关系)

    <Menu ItemsSource="{Binding CheckStates}">
        <Menu.ItemTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding IsChecked}"></CheckBox>
            </DataTemplate>
        </Menu.ItemTemplate>
    </Menu>

好的,我说的太多了!

答案 1 :(得分:0)

我想你告诉我一些与我的问题无关的事情。 必须从sql数据库调用数据。 我附上表格的形状。 目标组合框名称为cmbCement,上一个菜单为tsmCement。 我不确定在属性中添加项目是否适合我的表单目标。

public void FrmInterface_Load(object sender,EventArgs e)

    {

        SqlConnection con = new SqlConnection("server = .\\SQLEXPRESS ; DataBase = Badban; Integrated Security                          = true");
       con.Open();


        SqlDataAdapter da = new SqlDataAdapter("SelectCement", con);
        SqlCommand com=new SqlCommand("SelectCement",con);
        com.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        DataSet dt = new DataSet();
        da.Fill(dt);

        for (int i = 0; i < dt.Tables[0].Rows.Count; i++)
        {
            cmbCement.DroppedDown.Add(dt.Tables[0].Rows);
            cmbCement.ComboBox.DataSource = dt.Tables[0];
            cmbCement.ComboBox.ValueMember = "ID";
            cmbCement.ComboBox.Text = "Name";   

            con.Close();
        }