0

DropDownList を持つ Grid があり、静的データがあります。完璧に保存されています。しかし、編集中にSelectedValue、DataBase から DropDown を取得する必要があります。

私のコードは次のとおりです。

<asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderText="Order">
    <ItemTemplate>
        <asp:DropDownList ID="ddlOrder" SelectedValue='<%# (DataBinder.Eval(Container.DataItem,"Order")) %>' runat="server" Width="60">
            <asp:ListItem Text="1" Value="1"></asp:ListItem>
             <asp:ListItem Text="2" Value="2"></asp:ListItem>
             <asp:ListItem Text="3" Value="3"></asp:ListItem>
             <asp:ListItem Text="4" Value="4"></asp:ListItem>
        </asp:DropDownList>

    </ItemTemplate>

と:

protected void gvServicePort_RowDataBound(object sender , GridViewRowEventArgs e)
{
    //DropDown
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var dropdownList = (DropDownList)e.Row.FindControl("ddlOrder");
        for (int i = 1; i < 15; i++)
        {
            dropdownList.Items.Add(i.ToString());
        }
        dropdownList.SelectedValue =
              Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Order"));
    }
}

「ddlOrder」がアイテムのリストに存在しないため無効な SelectedValue を持っていると言うのはスローとエラーです。

誰でも助けることができますか?

4

1 に答える 1

1

割り当てを試みる前に、DropDownList に値が存在することをテストしてください。

if (dropdownList.Items.FindByValue(value) != null)
{
  // go ahead and assign
  dropdownList.SelectedValue = value;
}
else
{
  // handle the issue if necessary
}

値がリストに存在する場合がありましたが、SelectedValue の設定は予測できず、あなたが言及した「リストに存在しません」というエラーが発生しました。このような場合は、選択した項目を割り当てるために次のオプションのいずれかを試してください。

FindByValue メソッドを使用します。

dropdownList.Items.FindByValue(value).Selected = true;

またはこれ:

dropdownList.SelectedIndex = dropdownList.Items.IndexOf(dropdownList.Items.FindByText(value));

これらの最後の 2 つのスニペットを実装する方法をいつも忘れていますが、この SO の質問で両方を見つけることができました: How to programatically set SelectedValue of Dropdownlist when it is bound to XmlDataSource .

于 2013-02-15T08:04:54.780 に答える