0

asp.net グリッドビューの編集ボタンをクリックすると、このエラーが発生します。

「ddldept」には、アイテムのリストに存在しないため無効な SelectedValue があります。

これは私のドロップダウンのSelectedIndexChangedイベントです

protected void dgbus_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = dgbus.SelectedRow;

    //here am getting the error 
    ddldept.SelectedValue = row.Cells[2].Text.ToString().Trim();
    txtappcode1.Text = row.Cells[3].Text.ToString();
    txtappcode2.Text = row.Cells[4].Text.ToString();

    hdn.Value = row.Cells[1].Text.ToString();

    lblMsg.Text = "";
}

すべて正常に動作していますが、'Finance & Accounts' の行を編集しようとするとrow.Cells[2].Text.. この '&' は問題ですか?

私の Gridview マークアップ

<asp:GridView ID="dgbus" runat="server" class="table-format" 
              AutoGenerateColumns="False" Width="100%" 
              OnSelectedIndexChanged="dgbus_SelectedIndexChanged"
              OnRowCreated = "dgbus_RowCreated"
              OnPageIndexChanging = "dgbus_PageIndexChanging" AllowPaging="True" 
              PageSize="50">
     <Columns>
          <asp:CommandField ButtonType="Image" HeaderText="Edit Details" 
                            SelectImageUrl="~/images/modify.gif"
                            SelectText="Modify Approver" 
                            ShowSelectButton="True" />
          <asp:BoundField HeaderText="Approver ID" DataField="appid"/>
          <asp:BoundField HeaderText="Deptt" DataField="deptt" />
          <asp:BoundField HeaderText="Appcode1" DataField="appcode1" />
          <asp:BoundField HeaderText="Appcode1" DataField="appcode2" />
     </Columns>
     <RowStyle  CssClass="misctext" Height="20px" />
     <HeaderStyle BackColor="ControlLight" CssClass="contentbold" 
                  Height="20px" />
     <PagerSettings PageButtonCount="5" />
     <PagerStyle BackColor="Gainsboro" CssClass="link" HorizontalAlign="Right" 
                 VerticalAlign="Middle" />
</asp:GridView>
4

1 に答える 1

0

SelectedValue次のように、を設定する前に、ドロップダウン リストで値を見つけようとします。

if (ddldept.Items.FindByValue(row.Cells[2].Text.ToString().Trim()) != null)
{
    ddldept.SelectedValue = row.Cells[2].Text.ToString().Trim();
}

したがって、完全なコードは次のようになります。

protected void dgbus_SelectedIndexChanged(object sender, EventArgs e)
{
    GridViewRow row = dgbus.SelectedRow;

    if (ddldept.Items.FindByValue(row.Cells[2].Text.ToString().Trim()) != null)
    {
        ddldept.SelectedValue = row.Cells[2].Text.ToString().Trim();
    }        

    txtappcode1.Text = row.Cells[3].Text.ToString();
    txtappcode2.Text = row.Cells[4].Text.ToString();

    hdn.Value = row.Cells[1].Text.ToString();

    lblMsg.Text = "";
}
于 2013-11-02T12:40:32.263 に答える