2016-07-18 8 views
0

Iデータをマップし、データフィールドを保存するアプリケーションを作成しました。私のGridViewの最初の行については、新しいHearerRowをドロップダウンリストとともに追加しました。 以下は私が添付した私のコードです。GridViewのヘッダー行にドロップダウンリストヘッダー列マッピングを選択する

マイHTMLページのコード:背後に

<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); 

Click here to view screen displays the output of above codeを参照してください。 [保存]をクリックして、GridViewのヘッダDropDowmListを取得できない場合は、以下のコードを使用してnullを表示します。保存をクリックしてイベントでGridViewのヘッダー行のドロップダウンリストの値を取得する方法

  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 
       } 
      } 

+0

これは、各列のIDを繰り返したためです。一意のIDを割り当ててもう一度試してください –

答えて

0

私はこれを試したことがないので、保証はありませんが、このコードはどうですか?

 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よりも、データ行に探しています。

+0

上記のSaveボタンのイベントコードを書き直しました.... この行はDDLを取得中にNULLになります..... DropDownList cellText =((DropDownList)gvrow2.Cells [i]。 FindControl( "FieldValues")); – user2784321

+0

デバッガで 'gvrow1.Cells [i]'を調べて、その内容を確認してください。 'gvrow1.Cells [i] .Controls [0]'(ドロップダウンがコレクションの最初のコントロールである場合)のように、インデックスでコントロールを取得できます。 –

関連する問題