Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从RowCommand上嵌套的GridView中的DropDownList中检索值_C#_Asp.net_Vb.net_Gridview_Nested Gridview - Fatal编程技术网

C# 从RowCommand上嵌套的GridView中的DropDownList中检索值

C# 从RowCommand上嵌套的GridView中的DropDownList中检索值,c#,asp.net,vb.net,gridview,nested-gridview,C#,Asp.net,Vb.net,Gridview,Nested Gridview,我有一个嵌套的GridView(GvMP\u Summary\u Items)。每行包含一个DropDownList。DropDownList以嵌套GridView的RowDataBound事件为界 每行还包含一个按钮。在RowCommand事件上按下此按钮后,我希望找到DropDownList的当前选定值,以便在代码中进一步使用它 我的代码将只获取每行DropDownList的默认值,当前每行的DropDownList设置为0 以下是RowCommand事件: Protected Sub Gv

我有一个嵌套的GridView(
GvMP\u Summary\u Items
)。每行包含一个DropDownList。DropDownList以嵌套GridView的RowDataBound事件为界

每行还包含一个按钮。在RowCommand事件上按下此按钮后,我希望找到DropDownList的当前选定值,以便在代码中进一步使用它

我的代码将只获取每行DropDownList的默认值,当前每行的DropDownList设置为
0

以下是RowCommand事件:

Protected Sub GvMP_Summary_Items_RowCommand(sender As Object, e As GridViewCommandEventArgs)

  Dim lb As ImageButton = CType(e.CommandSource, ImageButton)
  Dim gvRow As GridViewRow = lb.BindingContainer //Getting current row to get index       

  Dim GvMP_Summary_Items As GridView = CType(gvRow.FindControl("GvMP_Summary_Items"), GridView)

  Dim intMPItem_Qty As Integer = CType(gvRow.FindControl("cboMPItem_Qty"), DropDownList).SelectedValue
  Dim strMPItem_Qty As String = CType(gvRow.FindControl("txtMPItem_Qty"), TextBox).Text

End Sub
我甚至在GridView行中包含了一个默认值为空的文本框。尽管是在行上,但如果输入了某些内容,在行上的命令事件会返回前面带有逗号(,)的值

这证明我选择了正确的行,并且可以从文本框而不是下拉列表中检索值

我有什么遗漏吗?为什么我可以返回在文本框中输入的值而不是DropDownList的选定值?还有,为什么文本框值前面有逗号(,)

注意:在上述情况下,代码是用VB编写的,所以答案是用VB而不是C#,但我可以接受两者

重要事项:
  • 页面加载方法中绑定父GridView
  • 在父GridView的行数据绑定事件中绑定子GridView
  • 在子GridView的行数据绑定事件中绑定DropDownList
  • 将命令名添加到子GridView中的按钮中
  • 最后,在子GridView的RowCommand事件中
    • 获取子GridView的
    • 然后从子GridView的行中查找子GridView中的所有控件
  • 我不太了解VB.NET,所以我添加了一个带有RowCommand事件的嵌套GridView示例(c#)(希望OP可以在VB.NET中使用它):

    HTML代码(.Aspx):
    
    
    注意:上面的DropDownList选择的是选定的值而不是文本。

    通过将
    行命令的
    命令源
    返回到按钮,然后从该按钮中获取正确的行,可以很容易地完成此操作。获得行后,您可以使用
    FindControl
    查找
    DropDownList
    。这适用于嵌套项的每个级别,也适用于顶部控件

    VB

    Protected Sub GMP_Summary_Items_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    
        'cast the commandsource back to a button
        Dim btn As Button = CType(e.CommandSource,Button)
    
        'get the current gridviewrow from the button namingcontainer
        Dim row As GridViewRow = CType(btn.NamingContainer,GridViewRow)
    
        'use findcontrol to locate the dropdownlist in that row
        Dim ddl As DropDownList = CType(row.FindControl("cboMPItem_Qty"),DropDownList)
    
        'show the selected value of the dropdownlist
        Label1.Text = ddl.SelectedValue
    
    End Sub
    
    代码是用a从C#翻译过来的,所以可能不是100%准确

    C#

    您确实需要将数据绑定到
    IsPostBack
    检查,否则每次回发时数据都会反弹到DDL,并且所选值丢失


    您是如何填充dropdownlist的?是否有可能在每次回发时都将其清除并重新填充,并将其重置为默认值?
    DataTable TempDT = new DataTable();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateDataTable();
    
        if (!IsPostBack)
        {
            GridView_Outer.DataSource = TempDT;
            GridView_Outer.DataBind();
        }
    }
    
    // create DataTable
    public void CreateDataTable()
    {
        TempDT = new DataTable();
        TempDT.Columns.Add("Label_Outer");
        TempDT.Columns.Add("Label_Inner");
        TempDT.Columns.Add("TextBox_Inner");
    
        TempDT.Rows.Add("OuterLabel", "InnerLabel", "");
        TempDT.Rows.Add("OuterLabel", "InnerLabel", "");
    
        // store DataTable into ViewState to prevent data loss on PostBack
        ViewState["DT"] = TempDT;
    }
    
    // Calls Outer GridView on Data Binding
    protected void GridView_Outer_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // check if gridview row is not in edit mode
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // Get Outer GrridView 's controls
            Label Label_Outer = (Label)e.Row.FindControl("Label_Outer");
            GridView GridView_Inner = (GridView)e.Row.FindControl("GridView_Inner");
    
            // get DataTable from ViewState and set to Inner GridView
            GridView_Inner.DataSource = (DataTable)ViewState["DT"];
            GridView_Inner.DataBind();
        }
    }
    
    // Calls Inner GridView on Data Binding
    protected void GridView_Inner_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        // check if gridview row is not in edit mode
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // Get Outer GrridView 's controls
            DropDownList DropDownList_Inner = (DropDownList)e.Row.FindControl("DropDownList_Inner");
    
            // Create a DataTable to Bind data for DropDownlist
            DataTable TempDDLDT = new DataTable();
            TempDDLDT.Columns.Add("ItemText");
            TempDDLDT.Columns.Add("ItemValue");
    
            TempDDLDT.Rows.Add("ItemText1", "ItemValue1");
            TempDDLDT.Rows.Add("ItemText2", "ItemValue2");
    
            // bind DataTable to the DropDownList
            DropDownList_Inner.DataSource = TempDDLDT;
            DropDownList_Inner.DataTextField = "ItemText";
            DropDownList_Inner.DataValueField = "ItemValue";
            DropDownList_Inner.DataBind();
        }
    }
    
    // Calls when Inner GridView 's button clicked
    protected void GridView_Inner_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        // get Inner GridView 's clicked row
        GridViewRow InnerGridViewRow = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
    
        // get Inner GridView 's controls from clicked row
        TextBox TextBox_Inner = (TextBox)InnerGridViewRow.FindControl("TextBox_Inner");
        DropDownList DropDownList_Inner = (DropDownList)InnerGridViewRow.FindControl("DropDownList_Inner");
    
        // check if correct button is clicked
        if (e.CommandName == "BtnInnerCmd")
        {
            string DropDownListValue = DropDownList_Inner.SelectedValue;
            string TextBoxValue = TextBox_Inner.Text;
    
            Label_Result.Text = "DropDownList 's Selected Value is " + DropDownListValue +
                                "<br />TextBox 's Entered Value is " + TextBoxValue;
        }
    }
    
    Protected Sub GMP_Summary_Items_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs)
    
        'cast the commandsource back to a button
        Dim btn As Button = CType(e.CommandSource,Button)
    
        'get the current gridviewrow from the button namingcontainer
        Dim row As GridViewRow = CType(btn.NamingContainer,GridViewRow)
    
        'use findcontrol to locate the dropdownlist in that row
        Dim ddl As DropDownList = CType(row.FindControl("cboMPItem_Qty"),DropDownList)
    
        'show the selected value of the dropdownlist
        Label1.Text = ddl.SelectedValue
    
    End Sub
    
    protected void GMP_Summary_Items_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        //cast the commandsource back to a button
        Button btn = e.CommandSource as Button;
    
        //get the current gridviewrow from the button namingcontainer
        GridViewRow row = btn.NamingContainer as GridViewRow;
    
        //use findcontrol to locate the dropdownlist in that row
        DropDownList ddl = row.FindControl("cboMPItem_Qty") as DropDownList;
    
        //show the selected value of the dropdownlist
        Label1.Text = ddl.SelectedValue;
    }