我有gridview,当选择一行时,它会填充到用于填充gridview本身的文本框中。最后一个字段是下拉列表,单击gridview时不显示。我设置了一个断点,看到它停留在第一个0指数上。我不知道为什么它没有前进...这是代码:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
....
if (DropDownListCurrency.Items.FindByValue(row.Cells[7].Text.ToString().Trim) != null)
{
DropDownListCurrency.SelectedValue = row.Cells[7].Text.ToString().Trim();
}
....
}
<asp:DropDownList ID="DropDownListCurrency" runat="server"
CausesValidation="True"
DataSourceID="CurrencyDropDownListDataSource"
DataTextField="Currency" DataValueField="Currency_ID"
AppendDataBoundItems="True">
<asp:ListItem Value="0" Text="<Select>" Enabled="True" Selected="False"></asp:ListItem>
</asp:DropDownList>
答案 0 :(得分:1)
为什么要从文本框中获取值。最好在事件中使用像这样的DataKeyNames
GridViewRow row = GridView.SelectedRow;
int id = Convert.ToInt32(GridView.DataKeys[row.RowIndex].Value);
这项工作如果您在DataKeyName中只有一个值,如果您看起来没有索引,如果您想要多个值使用此
int id = Convert.ToInt32(GridView.DataKeys[row.RowIndex].Values["FirstValue"]);
string name = Convert.ToString(GridView.DataKeys[row.RowIndex].Values["SecondValue"]);
答案 1 :(得分:0)
DropDownList是否包含您要显示的单词?
答案 2 :(得分:0)
您需要将AutoPostBack
属性设置为True
:
它应该是:
<asp:DropDownList ID="DropDownListCurrency" AutoPostBack="True" runat="server"
CausesValidation="True"
DataSourceID="CurrencyDropDownListDataSource"
DataTextField="Currency" DataValueField="Currency_ID"
AppendDataBoundItems="True">
<asp:ListItem Value="0" Text="<Select>" Enabled="True" Selected="False"></asp:ListItem>
</asp:DropDownList>
答案 3 :(得分:0)
犯了一个简单的错误......
调用错误字段应该是值(Currency_ID)而不是文本(货币)
DropDownListCurrency.SelectedValue = GridView1.DataKeys[row.RowIndex].Values["Currency_ID"].ToString().Trim();