0

データを表示するためにSqlDataSourceにリンクされたWebDataGridがあります。行を選択したら、編集のために、いくつかのテキストボックスとドロップダウンリストにその行のデータを入力します。テキストボックスは正常に機能します。次のコードを使用して、グリッドの2番目のフィールド(日付)を選択し、対応するテキストボックスに入力します(VBを使用しています)。

txtDate.Text = currentRow.Items(2).Value

ただし、同じコード構造を使用してドロップダウンリストにデータを入力しようとすると、次のエラーが発生します。

'ddlType' has a SelectedValue which is invalid because it does not exist in the list of items.

問題は、グリッドにtype_nameが表示されているのに、ドロップダウンリストにtype_idが入力されていることだと思います。これが問題を引き起こしているのでしょうか、そしてこれを回避する方法はありますか?

4

2 に答える 2

0

アイテムを選択する前に、リストボックスにアイテムを追加する必要があります。

DropDownListX.Items.Add("Item");

また

DropDownListX.Items.Add(new ListItem("String","Value"));

新しい行を選択するときは、必ず[ドロップダウン]ボックスをオフにしてください。そうしないと、古い行の値がそこに残ります。

DropDownListX.Items.Clear();

この後、SelectedValueを使用できます

乾杯、ステファン

于 2010-12-16T16:00:04.843 に答える
0

試すことができることがいくつかあります。

  1. SQLDataSourceを変更してtype_idも返し、列をvisible = "false"に設定します。これにより、名前の代わりにそのフィールドを選択して、.SelectedValueに使用できます。

  2. それが不可能な場合は、次のようなコードを使用できます(これは、ドロップダウンに表示されるテキストが一意であり、グリッドビューに表示されるテキストとまったく同じである場合にのみ機能します)。

    'replace this with the call to currentRow.Items(#).Value
    Dim sometext As String = "type_name"

    DropDownListName.Items.FindByText(sometext).Selected = True

  3. もう1つの可能性は、ドロップダウンの各要素をループしてテキストを見つけることです。これは力ずくの方法に似ていますが、機能します。

    'replace this with the call to currentRow.Items(#).Value

    Dim sometext As String = "type_name"

    For Each ddItem As ListItem In ddArriveAMPM.Items

     `If String.Compare(sometext, ddItem.Text, True) = 1 Then`   
         `ddItem.Selected = True`
      `End If`        
    `Next`
    
于 2010-12-16T16:49:01.643 に答える