我在gridview内部有下拉列表,因此当加载gridview并绑定下拉列表时,下拉列表仅显示下拉列表的第一个值,并且它不显示先前选择的值。加载gridview时,我希望下拉列表显示之前为该行选择的内容。这是我的代码: 下拉列表的aspx标记:
<asp:TemplateField HeaderText="Answer">
<ItemTemplate>
<asp:Label ID="lblAns" runat="server" Text='<%# Eval("DDL_ANS")%>' Visible="false"></asp:Label>
<asp:DropDownList ID="ddl_Answer" runat="server">
</asp:DropDownList>
</ItemTemplate>
以下是代码:
protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl_Answer;
//get current index selected
int current_quest = Convert.ToInt32(GridView1.DataKeys[e.Row.RowIndex].Value);
ddl_Answer = e.Row.FindControl("ddl_Answer") as DropDownList;
using (SqlConnection con2 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString))
{
con2.Open();
using (SqlCommand cmd1 = new SqlCommand("select distinct DD_ANSWER from table1 where ID= '" + current_quest + "' ", con2))
{
ddl_Answer.DataSource = cmd1.ExecuteReader();
ddl_Answer.DataTextField = "DD_ANSWER";
ddl_Answer.DataValueField = "DD_ANSWER";
ddl_Answer.DataBind();
}
con2.Close();
}
}
我试图在绑定后添加这行代码但是我收到此错误“对象引用未设置为对象的实例”
ddl_Answer.Items.FindByValue((e.Row.FindControl("lblAns") as Label).Text).Selected = true;
感谢
答案 0 :(得分:1)
我相信您SELECT
需要使用current_quest_sk
代替current_quest
Aslo在访问您的控件之前尝试检查null:
var ddl_Answer = e.Row.FindControl("ddl_Answer") as DropDownList;
var answerLabel = e.Row.FindControl("lblAns") as Label;
if(answerLabel !=null && ddl_Answer!=null)
{
ddl_Answer.Items.FindByValue(answerLabel.Text).Selected = true;
}
<小时/> 如果
@afzalulh
(ID)是表格中的整数,current_quest_sk
有一个有效的点删除引号。
你应该避免使用SQL注入,但这是一个不同的主题。
答案 1 :(得分:0)
在代码中放置一个断点,并使用调试器进行设置。
要么你的某个字符串名称中有拼写错误,要么你正在查看错误的控件。
单步执行代码将帮助您准确了解代码的哪一行导致问题。
您还可以在整个过程中放置一个try / catch块来帮助您找出问题所在。找到问题后,请删除try / catch块。