0

ListBox に CustomAction を入力しようとしていますが、うまくいきません。を理解しようとしsession.Database.Tablesますが、開始方法がわかりません。

このようなリストボックスを作成しました

<Control Id="ListBox1" Type="ListBox" Sorted="no"  Indirect="no" Property="LISTBOXVALUESONE" X="10" Y="50" Width="150" Height="180">
      <ListBox Property="LISTBOXVALUESONE">
        <ListItem Text="ARGHH!" Value="1"/>
      </ListBox>
    </Control>

しかし、詳細ログやテーブルに関するものにプロパティが表示されないので、customAction でテーブルを作成してデータを入力する必要があると思いますか? リストに表示ARGHH!されているので、存在するはずですが、値にアクセスするにはどうすればよいですか? そして、新しいものを追加しますか?

C++ でより多くの例やものを見つけましたが、C# で CustomAction を作成したいと思います

編集

Database db = session.Database;
string sqlInsertTemp = db.Tables["ListBox"].SqlInsertString + " TEMPORARY";
View view = db.OpenView(sqlInsertTemp );
view.Execute( new Record( new object[] { "LISTBOXVALUESONE", 2, "2", "One" } ));
view.Close();

Christopher のおかげで、値を追加できるようになりました。

db.Tables["ListBox"]同じままにして、私が教えたIDではなくタイプに名前を付ける必要がありview.Execute( new Record( new object[] { "LISTBOXVALUESONE", 2, "2", "One" } )); ますそして、この行にリストボックスプロパティを配置し、挿入する値「1」の配置

2 つの "2" は、私たちがそれを配置したいと考えているものであり、1 つの "ARGHH!" には既にテスト値があります。だから私は新しいものを2に入れましたが、詳細はわかりませんが...

カスタムアクションに 2,1 または 1,2 を入れると、テーブル更新エラーが発生し、重複値エラーが 1 つ発生しました。

4

2 に答える 2

3

私はあなたに役立つかもしれない約5年前のブログ記事を書きました:

DTF が .NET 開発者としてどのように役立つか

ビルドされた MSI に ListBox テーブルがあることを確認する必要があります。そうしないと、実行時に一時行を動的に生成しようとするときに SQL が機能しません。ListBox 要素がこれを行わない場合は、EnsureTable 要素が行います。

実際の C# は次のようになります。

Database db = session.Database;
string sqlInsertTemp = db.Tables["ListBox"].SqlInsertString + " TEMPORARY";
View view = db.OpenView(sqlInsertTemp );
view.Execute( new Record( new object[] { "TESTPROP", 1, "1", "One" } ));
view.Close();

これは古いコード例であり、using ステートメントと IDisposable を適切に利用していないことに注意してください。

于 2013-02-02T03:13:18.033 に答える
0

リスト ボックスに 1 つのレコードを追加します。

private void AddRecordToListBox(string listBoxPropertyName, int index, string text, string value)
{
    View view = session.Database.OpenView("SELECT * FROM ListBox");
    view.Execute();

    Record record = session.Database.CreateRecord(4);

    record.SetString(1, listBoxPropertyName);
    record.SetInteger(2, index);
    record.SetString(3, value);
    record.SetString(4, text);

    view.Modify(ViewModifyMode.InsertTemporary, record);
    view.Close();
}

リストボックスを埋める:

private void FillListBox()
{
    var dict = SomeDict();

    int index = 1;
    foreach (var element in dict)
    {
        AddRecordToListBox(ListBoxName, index, element.Key, element.Value);
        index++;
    }
}

リストボックスをクリア

private void ClearListBox(string listBoxPropertyName)
{
    var command = String.Format("DELETE FROM ListBox WHERE ListBox.Property='{0}'", listBoxPropertyName);
    View view = session.Database.OpenView(command);
    view.Execute();
    view.Close();
}
于 2015-10-09T10:10:38.217 に答える