我使用此代码将选定的gridview行放入Label或textbox并且它们正常工作,但是当我选择在从sqldatasource加载数据的下拉列表中显示数据时,会产生此错误:
' ddlRPGroup'具有一个无效的SelectedValue,因为它在项目列表中不存在。
protected void grdTenant_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = grdTenant.SelectedRow;
lblRPCode.Text = row.Cells[1].Text;
lblRP.Text = row.Cells[2].Text;
lblType.Text = row.Cells[3].Text;
lblBusiness.Text = row.Cells[4].Text;
ddlRPGroup.SelectedValue = row.Cells[5].Text;
}
标记
<table border="0" class="tblEditTenant" cellpadding="3">
<tr>
<td colspan ="4" style="font-weight: 700; font-size: medium;"><asp:Label ID="lblRP" runat="server" Text="Retail Partner"></asp:Label>-
<asp:Label ID="lblRPCode" runat="server" Text="RP Code"></asp:Label> </td>
</tr>
<tr>
<tr>
<td>Type:</td>
<td colspan ="3"><asp:Label ID="lblType" runat="server" Text="Type"></asp:Label></td>
</tr>
<tr>
<td>Business:</td>
<td colspan ="3"><asp:Label ID="lblBusiness" runat="server" Text="Business"></asp:Label></td>
</tr>
<tr>
<td>RP Group:</td>
<td colspan ="3">
<asp:DropDownList ID="ddlRPGroup" runat="server" DataSourceID="SqlDataSource3" DataTextField="name" DataValueField="code"></asp:DropDownList> <asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</td>
</tr>
</table>
答案 0 :(得分:1)
错误告诉您,您要在DropdownList中选择的值在列表中尚不存在。
如果此值已经存在于ddl中,则需要编辑ddl的DataSource以插入正确的值。 如果要先将所选值插入下拉列表然后选择它,请按以下步骤操作:
protected void grdTenant_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = grdTenant.SelectedRow;
lblRPCode.Text = row.Cells[1].Text;
lblRP.Text = row.Cells[2].Text;
lblType.Text = row.Cells[3].Text;
lblBusiness.Text = row.Cells[4].Text;
//new ListItem with Text and Value of cells[5] gets inserted into ddl
ddlRPGroup.Items.Insert(0, new ListItem(row.Cells[5].Text,row.Cells[5].Text));
ddlRPGroup.SelectedValue = row.Cells[5].Text;
}
如果该值已经在列表中,则需要编辑数据源以返回正确的值。
答案 1 :(得分:0)
已经找到了答案,以及导致错误的原因。
只需替换此行
ddlRPGroup.SelectedValue = row.Cells[5].Text;
用这个:
ddlRPGroup.SelectedItem.Text = row.Cells[5].Text;
它应该是selectItem.Text,因为selectedValue指向项目的代码而不是项目本身