DropDown选择的值不显示

时间:2013-12-23 20:23:53

标签: c# asp.net gridview

我在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;

感谢

2 个答案:

答案 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块。