获得onrowdatabound asp.net c#

时间:2017-11-03 15:52:49

标签: c# asp.net session gridview dynamic

我正在查询填充gridview的数据库,并在数据视图'onrowdatabound'中的每个单元格中添加下拉框,以便在填充gridview时填充这些DDL。

我希望能够单击一个按钮从这些DDL获取值,但是当单击按钮时发生回发并且所有DDL都消失并且它为我提供了DDL的默认值。

我认为他们消失了,因为他们没有被调用页面加载(我似乎无法做,因为他们被称为onrowdatabound)

<asp:GridView id="View" name="Spview" onrowdatabound="populateCellswithDDls" runat="server"></asp:GridView>

在内部'populateCellswithDDls'函数中添加ddl循环每个单元格:

 e.Row.Cells[i].Controls.Add(DDL1);

接下来我玩的是ViewState和Sessions,用于在回发时保存下拉列表(尝试在'populateCellswithDDls'函数中创建会话,如下所示:

DropDownList DDL1 = new DropDownList();

//I've tried newSkillsMon.AutoPostBack = true; but this just removes them all too

Session.Add("ViewState", View);
Session.Add("DropdownState", DDL1);

我已经尝试过各种各样的方法来处理viewstate和session但不确定在哪里使用它们来保存'onrowdatabound'种群的状态。

我的按钮目前看起来像这样:

 protected void confirm_Click(object sender, EventArgs e){

                {foreach (GridViewRow row in View.Rows)

                        // if (DDL1.SelectedItem.Value != "Select Item"){

                        if (IsPostBack)
                        {
                            Debug.WriteLine(DDL1.SelectedValue);
                        }

这只给了我X量的“选择项目”而不是我在DDL中选择的内容

我缺少什么,我会在哪里添加这些会话以保持onrowdatabound创建的ddl?

由于

2 个答案:

答案 0 :(得分:0)

可能对你有用而不是尝试会话的东西是使用hiddenfields。 为每个下拉列表位置创建一个隐藏字段,然后使用javascript用下拉值填充隐藏字段。 (可能希望在提交时进行一些服务器端验证)

使用jQuery这样的东西:

$(".dropdowns").on("change", function () {
    $(this).closest('input:hidden').val($(this).val());
});

并在您的确认中:

if (HF_HiddenField1.Value != "Select Item")

答案 1 :(得分:0)

创建动态控件时,需要在每个Page Load上重新创建它们并包含PostBack。首先,将GridView数据绑定到IsPostBack检查之外。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //normally you would bind here
    }

    //but now bind grid every page load
    GridView1.DataSource = Common.LoadFromDB();
    GridView1.DataBind();
}

现在在RowDataBound事件中确保DropDownList具有ID

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    //check if the row is a datarow
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //create a dropdownlist and assign an ID
        DropDownList DDL1 = new DropDownList();
        DDL1.ID = "DDL1";

        //add some dummy listitems
        DDL1.Items.Insert(0, new ListItem() { Text = "A", Value = "A" });
        DDL1.Items.Insert(1, new ListItem() { Text = "B", Value = "B" });
        DDL1.Items.Insert(2, new ListItem() { Text = "C", Value = "C" });

        //add the control to the row
        e.Row.Cells[0].Controls.Add(DDL1);
    }
}

现在,您可以通过点击按钮从正确的行中获取值。

protected void Button1_Click(object sender, EventArgs e)
{
    //find the dropdownlist in the correct row and cast it back to one
    DropDownList DDL1 = GridView1.Rows[i].FindControl("DDL1") as DropDownList;

    //display the result
    Label1.Text = DDL1.SelectedValue;
}