从gridview中的下拉列表中获取价值

时间:2016-11-22 08:51:15

标签: c# asp.net gridview

我正在尝试制作一个"时钟输入/输出网站"其中一个功能是用户编辑旧的时钟输入/输出。我添加了一个带有2个值的下拉列表" IND"和" UD"。我如何获得这些价值,并将它们发送到我的" CHECKIN" sql值。
我希望你知道我想解释什么。

这就是它的样子:

enter image description here

下拉:

<asp:TemplateField> 
     <ItemTemplate>
       <asp:DropDownList ID="DropDownList2" runat="server" 
           OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
         <asp:ListItem Selected="True">Ind</asp:ListItem>
         <asp:ListItem Value="UD">Ud</asp:ListItem>
       </asp:DropDownList>
     </ItemTemplate>
</asp:TemplateField>

我尝试了什么:

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
   GridViewRow row = GridView1.SelectedRow;
   string val = row.Cells[3].ToString();
   SqlDataSource1.SelectParameters.Add("CHECKEDIN", val);
}

以及:

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl = (DropDownList)GridView1.FindControl("DropDownList2");
    string val = ddl.SelectedValue;
    SqlDataSource1.SelectParameters.Add("CHECKEDIN", val);
}

这两个都返回&#34; null&#34;寿

2 个答案:

答案 0 :(得分:0)

您可以将发件人转发回DropDownlist并获取所选值

DropDownList dropDownList = sender as DropDownList;
string val = dropDownList.SelectedValue;

但是你怎么知道这个方法DropDownList属于哪一行?

你可以使用一个技巧,比如滥用CSS类来获得正确的行号。

<asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" AutoPostBack="true" CssClass='<%# Container.DataItemIndex %>'>

在代码中获取行号。

int rowNumber = Convert.ToInt32(dropDownList.CssClass);

答案 1 :(得分:0)

使用GridView RowDataBound 事件。

<强>代码

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow 
               && GridView1.EditIndex == e.Row.RowIndex)
    {
        DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList2");
        string val = ddl.SelectedValue.ToString();
        SqlDataSource1.SelectParameters.Add("CHECKEDIN", val);
    }
}