在 GridView 标题行下拉列表中选择标题列映射

本文关键字:标题 选择 映射 下拉列表 GridView | 更新日期: 2023-09-27 17:57:25

我创建了一个应用程序,它将映射数据并保存数据字段。对于 GridView 中的第一行,我添加了带有下拉列表的新 HearerRow。下面是我附加的代码。

我的网页代码:

<asp:GridView ID="gvDataMapping" runat="server" AutoGenerateColumns="false">
</asp:GridView>

和代码隐藏:

for (int i = 0; i < dtValues.Columns.Count; i++)
{
   BoundField boundfield = new BoundField();
   boundfield.DataField = dtValues.Columns[i].ColumnName.ToString();
   boundfield.HeaderText = dtValues.Columns[i].ColumnName.ToString();
   gvDataMapping.Columns.Add(boundfield);
}
gvDataMapping.DataSource = dtValues;
gvDataMapping.DataBind();
GridViewRow HeaderGridRow = new GridViewRow(0, 0, DataControlRowType.Header,
                            DataControlRowState.Insert);
DropDownList ddlFieldValues;
TableCell HeaderCell;
foreach (DataColumn dc in dtValues.Columns)
{
    ddlFieldValues = new DropDownList();
    ddlFieldValues.ID = "FieldValues";
    ddlFieldValues.DataSource = (DataTable)Session["WorkItemTypeField"];
    ddlFieldValues.DataTextField = "FieldName";
    ddlFieldValues.DataValueField = "FieldID";
    ddlFieldValues.DataBind();
    ddlFieldValues.Items.Insert(0, new ListItem("", "0"));
    HeaderCell = new TableCell();
    HeaderCell.Controls.Add(ddlFieldValues);
    HeaderGridRow.Cells.Add(HeaderCell);
}
gvDataMapping.DataSource = dtValues;
gvDataMapping.DataBind();
gvDataMapping.Visible = true;
lblDataMapping.Visible = true;
gvDataMapping.Controls[0].Controls.AddAt(1, HeaderGridRow);

请参阅"单击此处查看"屏幕显示上述代码的输出。单击"保存"时,我无法使用以下代码获取 GridView 标头 DropDowmList 其显示空值。

            GridViewRow gvrow2 = gvDataMapping.HeaderRow;
            foreach (GridViewRow row in gvDataMapping.Rows)
            {
                for (int i = 0; i < gvDataMapping.Columns.Count; i++)
                {
                    String header = gvDataMapping.Columns[i].HeaderText; //gets column name
                    DropDownList cellText = ((DropDownList)gvrow2.Cells[i].FindControl("FieldValues")); //Not getting the DDL returns null
                }
            }

如何在保存点击事件中获取 GridView 标题行下拉列表值?

在 GridView 标题行下拉列表中选择标题列映射

不能保证,因为我自己还没有尝试过这个,但是这段代码呢?

        GridViewRow gvrow1 = GrdDynamic1.HeaderRow;
        foreach (GridViewRow row in GrdDynamic1.Rows)
        {
            for (int i = 0; i < GrdDynamic1.Columns.Count; i++)
            {
                String header = GrdDynamic1.Columns[i].HeaderText;
                DropDownList cellText = ((DropDownList)gvrow1.Cells[i].FindControl("FieldValues"));
            }
        }

看起来好像您要查找右列中的下拉列表,而不是右行:您正在查找数据行,而不是标题行gvrow1