2016-05-17 5 views
0

enter image description hereenter image description here Windowsアプリケーションにチェックボックスを追加したい(下の図参照)。誰もがこれで私を助けることができますか?チェックボックスのラベルはxmlからバインドされています。xml構造体が追加されました。私はそれから始める方法を理解することができません。ダイナミック9チェックボックスを作成する3特定のラベルの下にc#

+0

こんにちは。ようこそので、どのように適切に質問することができますをお読みください。ありがとうございます – acostela

+0

これまでに試したことのいくつかのコードを提供できますか? – Usman

答えて

1

`private void bindChkServerIIS() { List chkListIIS = new List(); chkListIIS = Serverlist();

 int x = 50; 
     int y = 0; 
     int p = 240; 
     foreach (ItemLists serviceItem in chkListIIS) 
     { 
      y = y + 18; 
      string itemValue = serviceItem.Value; 
      string itemName = serviceItem.Name; 

      CheckBox box1 = new CheckBox(); 
      Label lbl = new Label(); 
      box1.Text = itemName; 
      box1.Font = new Font(FontFamily.GenericSansSerif, 8F); 
      lbl.Font = new Font(FontFamily.GenericSansSerif, 8F); 
      //lbl.Text = CheckStatus(itemName, itemValue); 
      box1.Tag = itemValue; 
      lbl.Text = "Status"; 
      lbl.AutoSize = true; 
      box1.AutoSize = true; 
      gbIis.Controls.Add(box1); 
      gbIis.Controls.Add(lbl); 
      box1.Location = new Point(x, y); 
      lbl.Location = new Point(p, y); 
     } 

    }` private List<ItemLists> Serverlist() 
    { 
     xmldoc.Load(xmlPath); 
     XmlNodeList nodelist = xmldoc.SelectNodes("servers"); 
     List<ItemLists> chkListServer = new List<ItemLists>(); 
     { 
      foreach (XmlNode node in nodelist.Item(0)) 
      { 
       foreach (XmlNode childElement in node) 
       { 

        string serverApp = childElement.ChildNodes[4].InnerText; 
        string serverName = childElement.Attributes["Name"].Value; 

        if (childElement.Attributes["Name"].Value != "vmxxhegepda01" 
         && childElement.Attributes["Name"].Value != "vmxxhegepqa01" 
         && childElement.Attributes["Name"].Value != "vmxxhegeppa01") 
        { 
         chkListServer.Add(new ItemLists() { Name = serverName, Value = serverApp }); 
        } 

       } 

      } 
     } 
     return chkListServer; 
    }`enter code here` 
1

あなたのXML組織はわかりませんが、参考になることを願っています。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     XmlDocument Doc = new XmlDocument(); 
     Doc.Load("YourPath to XML document"); 
     foreach (XmlNode node in Doc.DocumentElement.ChildNodes) 
     { 
      if (node.Name == "perrent") 
      { 
       /*This code setup name of label, we take Attribute of parrent*/ 
       Label lb = new Label(); 
       lb.Content = node.Attributes.GetNamedItem("ParrentAttribute"); 
       /*SPanel is added in MainWindow XAML it is a ordinary Stack Panel you can dynamically create stack panel and just add to grid from code*/ 
       SPanel.Children.Add(lb); 
       XmlNodeList SearchNode = node.ChildNodes; 
       /*Listing all child nodes to create check boxes */ 
       foreach (XmlNode Child in SearchNode) 
       { 
        CheckBox cb = new CheckBox(); 
        cb.Margin = new Thickness(20, 0, 0, 0); 
        cb.Content = Child.InnerText; 
        SPanel.Children.Add(cb); 

       } 
      } 
     } 
    } 
} 

XAML

<Window x:Class="test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <StackPanel x:Name="SPanel"/> 
</Grid> 

XMLドキュメント

<root> 
    <perrent ParrentName = "Dev"> 
    <node>File import Service</node> 
    <node>Settlement Service</node> 
    <node>Store conversion Service</node> 
    </perrent> 
    <perrent ParrentName = "QA"> 
    <node>File import Service</node> 
    <node>Settlement Service</node> 
    <node>Store conversion Service</node> 
    </perrent> 
</root> 
1

以下のC#コードで試してください。

try 
     { 
      XmlReader xmlFile; 
      xmlFile = XmlReader.Create("E:\\Product.xml", new XmlReaderSettings()); 
      DataSet ds = new DataSet(); 
      ds.ReadXml(xmlFile); 
      var TblTitle = ds.Tables[0]; 
      var i = 39; 
      var j = 67; 

      foreach(DataRow row in TblTitle.Rows) 
      { 
       //Create new GroupBox 
       GroupBox GrpBox = new GroupBox(); 
       GrpBox.Text = row.ItemArray[1].ToString(); 
       GrpBox.Location = new System.Drawing.Point(i, j); 

       //Create new Checkboxlist in GroupBox 
       CheckedListBox ChkList = new CheckedListBox(); 
       ChkList.Location = new System.Drawing.Point(44, 20); 
       ChkList.DataSource = TblTitle.ChildRelations[0].ChildTable; 
       ((ListBox)ChkList).ValueMember = "Name"; 
       ((ListBox)ChkList).DisplayMember = "Name"; 

       //add Checkboxlist into GroupBox 

       GrpBox.Controls.Add(ChkList); 

       //add this groupBox to Form 
       this.Controls.Add(GrpBox); 

       //set position for next one 
       i = +1; 
       j = +176; 
      } 


      //checkedListBox1. 
      //checkedListBox1.DataBindings(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

と、このXML例:

<?xml version="1.0" encoding="utf-8" ?> 
<CheckBox Name="Dev"> 
    <item Name="item1"/> 
    <item Name="item2"/> 
</CheckBox> 
<CheckBox Name="QA"> 
    <item Name="item3"/> 
    <item Name="item4"/> 
</CheckBox> 

あなたが任意のより多くの関心を持っている場合、私に知らせてください。私はあなたに例を提供します。

+0

先生、私が使ったXML構造で説明していただけますか?私はxmlを読んだ。しかし、動的チェックボックスとバインドする方法を取得していない。私はそれらに対してステータスを表示する必要があるチェックボックスリストを使用することはできません。親切に私に解決策を教えてください。 –

+0

動的チェックボックスのデータをバインドできるようにするには、 'UserControl'を作成する必要があります。それ以外の場合は、 'ChildTable'の各' row'をループするために 'foreach'を追加する必要があります。 –

関連する問題