按钮单击时在gridview内的dropdownlist选择值中抛出Null Exception

时间:2013-06-03 06:40:55

标签: c# asp.net c#-4.0 gridview datagridview

Dropdownlist动态绑定到gridview。它将始终位于gridview的第一行。 当我尝试获取dropdownlist值时,它给出null值:

Here is code to bind dropdownlist to gridview:

protected void dgData_RowDataBound(object sender, GridViewRowEventArgs e)
{

    ArrayList strHead = null;
    if (e.Row.RowType == DataControlRowType.Header)
    {
        strHead = new ArrayList();
        foreach (DataControlFieldCell cell in e.Row.Cells)
        {
            strHead.Add(cell.Text);
        }
        ViewState["HeaderCell"] = strHead;
    }
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DropDownList ddl;


        if (e.Row.RowIndex == 0)
        {
            for (Int32 i = 0; i < e.Row.Cells.Count; i++)
            {
                ddl = new DropDownList();
                ddl.ID = "ddlCol" + i.ToString();
                e.Row.Cells[i].Controls.Add(ddl);
                ddl.Items.Insert(0, new ListItem(string.Empty, string.Empty));
                ddl.Items.Insert(1, new ListItem("First Name", "1"));
                ddl.Items.Insert(2, new ListItem("Last Name", "2"));
                ddl.Items.Insert(3, new ListItem("Company Name", "3"));
                ddl.Items.Insert(4, new ListItem("Account No", "4"));
                ddl.Items.Insert(5, new ListItem("Account No 2", "5"));
                ddl.Items.Insert(6, new ListItem("Account No 3", "6"));
                ddl.Items.Insert(7, new ListItem("Groups", "7"));
                ddl.Items.Insert(8, new ListItem("Business Phone", "8"));
                ddl.Items.Insert(9, new ListItem("Home Phone", "9"));
                ddl.Items.Insert(10, new ListItem("Mobile", "10"));
                ddl.Items.Insert(11, new ListItem("Email", "11"));
                ddl.Items.Insert(12, new ListItem("Other Phone Number", "12"));
                ddl.Items.Insert(13, new ListItem("Web Page", "13"));
                ddl.Items.Insert(14, new ListItem("IM Address", "14"));
                ddl.Items.Insert(15, new ListItem("Comment", "15"));
                ddl.Items.Insert(16, new ListItem("Street Address 1", "16"));
                ddl.Items.Insert(17, new ListItem("Street Address 2", "17"));
                ddl.Items.Insert(18, new ListItem("Street City / Suburb", "18"));
                ddl.Items.Insert(19, new ListItem("Street State", "19"));
                ddl.Items.Insert(20, new ListItem("Street Post Code", "20"));
                ddl.Items.Insert(21, new ListItem("Street Country", "21"));
                ddl.Items.Insert(22, new ListItem("Mailing Address 1", "22"));
                ddl.Items.Insert(23, new ListItem("Mailing Address 2", "23"));
                ddl.Items.Insert(24, new ListItem("Mailing City / Suburb", "24"));
                ddl.Items.Insert(25, new ListItem("Mailing State", "25"));
                ddl.Items.Insert(26, new ListItem("Mailing Post Code", "26"));
                ddl.Items.Insert(27, new ListItem("Mailing Country", "27"));
                ddl.Items.Insert(28, new ListItem("Notes", "28"));
                ddl.Items.Insert(29, new ListItem("Custom Fields", "29"));
                ddl.Items.Insert(30, new ListItem("Relationship Manager", "30"));
                ddl.Items.Insert(31, new ListItem("Primary Interest", "31"));
                ddl.Items.Insert(32, new ListItem("Account Manager", "32"));
                strHead = (ArrayList)ViewState["HeaderCell"];




                foreach(ListItem item in ddl.Items)
        {
             if (strHead[i].ToString() == item.Text)
             {
            ddl.SelectedValue = item.Value;
             }
            else
             {
         // ddl.SelectedIndex = 0;
            }


                }

            }



         }

    }

  }

绑定gridview的代码:

 private void grdbind()
{


    DataTable db = new DataTable();
    db = (DataTable)Session["csvdata"];
    DataRow newrow = db.NewRow();
    db.Rows.InsertAt(newrow, 0);

    colcount = db.Columns.Count;

    dgData.DataSource = db;
    dgData.DataBind();


  }

以下是按钮点击时获取下拉列表值的代码,我遇到了问题:

   protected void Button1_Click(object sender, EventArgs e)
{
     GridViewRow row;
    row = dgData.Rows[0];
   DropDownList ddl= (DropDownList)(row.Cells[1].FindControl("ddlCol1"));

}

1 个答案:

答案 0 :(得分:0)

如果你有一个标题行,它将始终位于索引0,所以你不能测试它不是标题行并且索引为0,因为两个检查都将返回false。

在添加DDL的检查和获取DDL的代码中更改索引。

添加代码:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    DropDownList ddl;

    if (e.Row.RowIndex == 1)
    {
        // ..... 
    }
}

获取代码:

GridViewRow row = dgData.Rows[1];
DropDownList ddl = (DropDownList)row.Cells[1].FindControl("ddlCol1");