Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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/1/asp.net/30.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
获取dropdownlist值c#asp时避免回发_C#_Asp.net_Gridview_Pageload - Fatal编程技术网

获取dropdownlist值c#asp时避免回发

获取dropdownlist值c#asp时避免回发,c#,asp.net,gridview,pageload,C#,Asp.net,Gridview,Pageload,我在C#中动态创建了一个dropdownlist(asp中没有代码): 无法从pageLoad()调用此函数,因为它不会在每次刷新页面时加载。但是,每次在另一个dll的回发(OnSelectedIndexChanged())时都会加载它,因此我无法执行!iPostBack 此dll是在以下情况下创建的: 另一个dropdownlist的值使用OnSelectedIndexChanged()填充GridView 我现在正试图使用按钮onclick()事件访问myDDL中的值,但是这总是会回

我在C#中动态创建了一个
dropdownlist
(asp中没有代码):

无法从
pageLoad()
调用此函数,因为它不会在每次刷新页面时加载。但是,每次在另一个dll的回发(
OnSelectedIndexChanged()
)时都会加载它,因此我无法执行
!iPostBack


此dll是在以下情况下创建的:

  • 另一个
    dropdownlist
    的值使用
    OnSelectedIndexChanged()填充
    GridView

我现在正试图使用按钮
onclick()
事件访问
myDDL
中的值,但是这总是会回发和刷新页面,因此
myDDL
会消失,当我将值打印到控制台时,它只会给出我的第一个值
select activity
,而不是我实际选择的值

pageLoad()上未填充此dll时,如果更改这些值,我将如何获取这些值。

我试过看AJAX,但是我不确定如何通过它来看c值。我也尝试了
viewstates
,但我没有运气,因为它没有在
pageLoad()

上填充。我认为,如果您想访问动态创建的控件的值,您需要在每次回发中重新绑定网格

我尝试用下面的示例代码模拟这种情况,并且成功地访问了该值

ASPX代码

<asp:DropDownList ID="select1" name="assignGetForm" runat="server" class="selectClass" AutoPostBack="True" />
<asp:GridView ID="GridView1" name="GridView1" OnRowDataBound="GridView1_DataBound" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

C#代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        FillMainDll();

    if (!IsPostBack || GridView1.Rows.Count > 0)
        BindGrid();
}

private void FillMainDll()
{
    select1.DataSource = new int[] { 1, 2, 3 };
    select1.DataBind();
}

private void BindGrid()
{
    var dt = new DataTable();

    dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
    dt.Columns.Add(new DataColumn("Name", typeof(string)));

    for (int i = 1; i < 5; i++)
    {
        DataRow dr = dt.NewRow();

        dr[0] = i;
        dr[1] = "Name - " + i.ToString();

        dt.Rows.Add(dr);
    }

    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var myDDL = new DropDownList();
        myDDL.ID = "myDDL";
        myDDL.DataSource = GetGridRowDdlData();
        myDDL.DataBind();
        e.Row.Cells[1].Controls.Add(myDDL);
    }
}

private IEnumerable<string> GetGridRowDdlData()
{
    var data = new List<string>();

    for (int i = 1; i < 4; i++)
    {
        data.Add("Name - " + i * int.Parse(select1.SelectedValue));
    }

    return data;
}

protected void Button1_Click(object sender, EventArgs e)
{
    var sb = new System.Text.StringBuilder();

    foreach (GridViewRow row in GridView1.Rows)
    {
        var myDDL = row.FindControl("myDDL") as DropDownList;
        if (myDDL != null)
        {
            sb.AppendFormat("{0}<br/>", myDDL.SelectedValue);
        }
    }

    Response.Write(sb.ToString());
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
FillMainDll();
如果(!IsPostBack | | GridView1.Rows.Count>0)
BindGrid();
}
私有void FillMainDll()
{
选择1.DataSource=newint[]{1,2,3};
选择1.DataBind();
}
私有void BindGrid()
{
var dt=新数据表();
添加(新的数据列(“ID”,typeof(Int32));
添加(新数据列(“名称”,类型(字符串));
对于(int i=1;i<5;i++)
{
DataRow dr=dt.NewRow();
dr[0]=i;
dr[1]=“Name-”+i.ToString();
dt.Rows.Add(dr);
}
GridView1.DataSource=dt;
GridView1.DataBind();
}
受保护的无效GridView1_数据绑定(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
var myDDL=new DropDownList();
myDDL.ID=“myDDL”;
myDDL.DataSource=GetGridRowDdlData();
myDDL.DataBind();
e、 Row.Cells[1]。Controls.Add(myDDL);
}
}
私有IEnumerable GetGridRowdlData()
{
var data=新列表();
对于(int i=1;i<4;i++)
{
data.Add(“Name-”+i*int.Parse(select1.SelectedValue));
}
返回数据;
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
var sb=new System.Text.StringBuilder();
foreach(GridView1.Rows中的GridViewRow行)
{
var myDDL=row.FindControl(“myDDL”)作为DropDownList;
if(myDDL!=null)
{
sb.AppendFormat(“{0}
”,myDDL.SelectedValue); } } 写(某人写的东西); }
您看过Page.IsPostBack属性了吗。你可以检查网页是否被发回,并防止重新加载是的,如果我把我的按钮绑定进去!ispostback它不绑定,因为我正在另一个ddl上发回。。但是,页面加载不是这样的。然后,当我按下按钮获取我的值(DDL.SelectedValue)时,它会将创建的DDL发回,因此会丢失,因为它们没有在pageload上填充!这一切都在循环中进行,这是有意义的,绑定网格以便rowdatabound激发。。我会在回复中看看它是如何工作的谢谢!!
<asp:GridView id="GridView1" name="GridView1" onrowdatabound="populateCellsDDL" runat="server"></asp:GridView>
<asp:DropDownList ID="select1" name="assignGetForm" runat="server" class="selectClass" AutoPostBack="True" />
<asp:GridView ID="GridView1" name="GridView1" OnRowDataBound="GridView1_DataBound" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        FillMainDll();

    if (!IsPostBack || GridView1.Rows.Count > 0)
        BindGrid();
}

private void FillMainDll()
{
    select1.DataSource = new int[] { 1, 2, 3 };
    select1.DataBind();
}

private void BindGrid()
{
    var dt = new DataTable();

    dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
    dt.Columns.Add(new DataColumn("Name", typeof(string)));

    for (int i = 1; i < 5; i++)
    {
        DataRow dr = dt.NewRow();

        dr[0] = i;
        dr[1] = "Name - " + i.ToString();

        dt.Rows.Add(dr);
    }

    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void GridView1_DataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var myDDL = new DropDownList();
        myDDL.ID = "myDDL";
        myDDL.DataSource = GetGridRowDdlData();
        myDDL.DataBind();
        e.Row.Cells[1].Controls.Add(myDDL);
    }
}

private IEnumerable<string> GetGridRowDdlData()
{
    var data = new List<string>();

    for (int i = 1; i < 4; i++)
    {
        data.Add("Name - " + i * int.Parse(select1.SelectedValue));
    }

    return data;
}

protected void Button1_Click(object sender, EventArgs e)
{
    var sb = new System.Text.StringBuilder();

    foreach (GridViewRow row in GridView1.Rows)
    {
        var myDDL = row.FindControl("myDDL") as DropDownList;
        if (myDDL != null)
        {
            sb.AppendFormat("{0}<br/>", myDDL.SelectedValue);
        }
    }

    Response.Write(sb.ToString());
}