0

2D 配列を使用して bool 型のデータグリッドのようなマトリックスを作成する必要があります。次のように、データグリッドの各セルに対して評価する必要があるブール文字列のセットがあります

例えば

セル[0,0] = ((サーバー1 || サーバー2) && サーバー3)

セル[0,1] = ((サーバー1 && サーバー3) && サーバー4)

セル[1,0] = ((サーバー3 && サーバー2) || サーバー4)

サーバー N の値は Running または Stopped であり、データベースから取得されます。

2D マトリックス データグリッドを作成する方法と、データグリッド セルごとに最終結果が TRUE または FALSE になるようにブール文字列を評価する方法。

この link 2D array for stringを見て、これを例に取りましたが、これらの評価文字列をどこで呼び出すべきかわかりません。それらをXMLファイルに保存してから呼び出す必要がありますか、それとも別の方法で呼び出す必要がありますか..

私が試したこと:

public MatrixPage()
{
InitializeComponent();
bool[,] matrixcell = new bool[10, 22];

matrixcell[0, 0] = // should I place the Evaluation string here;
matrixcell[0, 1] = ;
for  (int i = 0; i < 10; i++)
{
for (int j = 0; j < 22; j++)
{
 matrixcell[i, j] = // or Should I call here the evaluation boolean string for each    iteration respective to the row/column from a file like XML or a any other file ??
}
}
 var datsource = (from i in Enumerable.Range(0, matrixcell.GetLength(0))
    select new clsdatasource(matrixcell[i, 0], matrixcell[i, 1], matrixcell[i,3])).ToList();
 this.dg1.ItemsSource = datsource;
}
public class clsdatasource
{
public bool str1 { get; set; }
public bool str2 { get; set; }
public bool str3 { get; set; }
public clsdatasource(bool s1, bool s2,bool s3)
{
 this.str1 = s1;
 this.str2 = s2;
 this.str3 = s3;
}
}

XAML

  <Grid>
        <DataGrid x:Name="dg1" CanUserAddRows="False" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="System1" Binding="{Binding str1}"/>
                <DataGridTextColumn Header="System2" Binding="{Binding str2}"/>
                <DataGridTextColumn Header="System3" Binding="{Binding str3}"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

親切に助けてください..質問が理解できない場合は、コメントしてください。より明確に説明しようとします

4

1 に答える 1

1

あなたのクラスはこれを望んでいます...

public class Clsdatasource
{
    public bool Str1 { get; set; }
    public bool Str2 { get; set; }
    public bool Str3 { get; set; }
    public Clsdatasource(){}
    public Clsdatasource(bool s1, bool s2, bool s3)
    {
        Str1 = s1;
        Str2 = s2;
        Str3 = s3;
    }
}

そして、それらのコレクションは次のようになります...

public class ClsdataSourceCollection : ObservableCollection<Clsdatasource>
{
    private const string FileName = "MyData.xml";
    private readonly XmlSerializer _serializer = new XmlSerializer(typeof(List<Clsdatasource>));
    public void LoadData(Action onCompleted)
    {
        using (StreamReader sr = new StreamReader(FileName))
        {
            var s = _serializer.Deserialize(sr) as List<Clsdatasource>;
            if (s != null)
            {
                Clear();
                s.ForEach(Add);
            }
        }
        onCompleted();
    }
    public void SaveData(Action onCompleted)
    {
        using (StreamWriter sw = new StreamWriter(FileName))
        {
            List<Clsdatasource> tosave = new List<Clsdatasource>();
            tosave.AddRange(this);
            _serializer.Serialize(sw, tosave);
        }
        onCompleted();
    }
}

そして、このスニペットで何が起こっているかを見ることができます...

private static void TestSaving()
{
    ClsdataSourceCollection collection = new ClsdataSourceCollection();
    for (int i = 0; i < 100; i++)
    {
        collection.Add(new Clsdatasource(true, true, true));
    }
    collection.SaveData(()=> Console.WriteLine("Saved"));
}
private static void TestLoading()
{
    ClsdataSourceCollection collection = new ClsdataSourceCollection();
    collection.LoadData(() => Console.WriteLine("Loaded"));
}

これら 2 つのメソッドは、作成、保存、およびロードを行うだけです。アーティファクトは、アプリのルート ディレクトリにある MyData.xml という XML ファイルです。すべてのコーナー ケース、エラー検出、競合をコーディングする必要があります。

シバン全体の最後のステップは、 this.dg1.ItemsSource = collection; を設定することです。

グリッドをリアルタイムで更新したい場合、Clsdatasource クラスは INotifyPropertyChanged から継承する必要があることに注意してください。これはまったく別の問題です。

これで、シリアル化を開始できます。それは約.NET 3かそこら以来、「箱から出して」来ます....

于 2013-06-03T11:20:04.067 に答える