본문 바로가기

개발/C#, ASP.NET

DataGrid에 DropDownList 사용하기

-- aspx --

: 컬럼에 템플릿 컬럼으로 아래와 같이 추가

<Columns>
 <asp:BoundColumn DataField="LOCDESCRIPTION" HeaderText="설치위치">
  <ItemStyle Width="69px"></ItemStyle>
 </asp:BoundColumn>
 ...
 <ASP:TEMPLATECOLUMN HeaderText="종속교환기">
  <ItemTemplate>
   <asp:DropDownList Runat="server" ID="ddlSubEquipList" DataSource='<%#GetSubEquipList()%>' DataTextField="NEALIAS" DataValueField="NESCODE" SelectedIndex='<%#GetSubEquipIndex(DataBinder.Eval(Container.DataItem, "SUBTENESCODE", "{0:c}"))%>'>
   </asp:DropDownList>
  </ItemTemplate>
 </ASP:TEMPLATECOLUMN>
</Columns>

 

-- cs --

: 멤버변수 선언

  protected DataView DVSubEquipList;        // DOTS현황의 종속교환기리스트(드랍다운리스트에 바인딩)
  protected ArrayList arrTSEPortInfo;

 

: 드랍다운리스트에 바인딩될 데이터 호출

SetSubEquipList(hidOfficeSCode.Value);
  private void SetSubEquipList(string strOfficeSCode)
  {
   DataSet queryDS = null;

   try
   {
    using(KT.NeOSS.FMB.SwitchMgr.BSL.SwitchEquipMgr.PSNTEquip psntEquip = new KT.NeOSS.FMB.SwitchMgr.BSL.SwitchEquipMgr.PSNTEquip())
    {
     queryDS = psntEquip.GetPSTNEquipList_For_NODE("4.5", "'EN'", "000000", "000000", strOfficeSCode, "10", "40", "000000", "1006", "", "", "", "0", "10", "10");
     DVSubEquipList = new DataView(queryDS.Tables[0]);
    }
        DataRowView drv = DVSubEquipList.AddNew();
    // Change values in the DataRow.
    drv["NEALIAS"] = " 선택하세요";//소트시 맨위에 갈 수 있게 앞에 스페이스 추가
    drv.EndEdit();

  DVSubEquipList.Sort = "NEALIAS ASC";//소팅
 }
   catch(Exception ex)
   {
    base.errorMessage = ex.Message;
   }
   finally
   {
    if(queryDS != null)
     queryDS.Dispose();
   }  
  }

 

: 화면에 뿌려질때 호출되는 함수

  protected DataView GetSubEquipList()
  {
   return DVSubEquipList;
  }
  protected int GetSubEquipIndex(string strValue)
  {
   for(int i=0; i < DVSubEquipList.Count; i++)
   {
    if((DVSubEquipList[i]["NESCODE"] != null) && DVSubEquipList[i]["NESCODE"].ToString() == strValue)
    {
     return i;
    }
   }
   return 0;
  }

 

: 화면에서 변경된 데이터를 가져와 UPDATE함수에 넘겨주기 위해 호출할 함수

GetPsdResult_Update();

  private void GetPsdResult_Update()
  {
   arrTSEPortInfo = new ArrayList(psdResult.Items.Count);
   for(int i = 0;i< psdResult.Items.Count;i++)
   {
    DataGridItem item = psdResult.Items[i];
    string [] astrTSEPortInfo = new string[] {item.Cells[7].Text, item.Cells[8].Text, ((DropDownList)item.Cells[6].FindControl("ddlSubEquipList")).SelectedValue};
    arrTSEPortInfo.Add(astrTSEPortInfo);
   }
  }