모든 행에 드롭 다운 목록이 포함 된 gridview가 있습니다. 모든 드롭 다운 목록을 동적으로 바인드하고 싶습니다. 누군가 내가 어떻게 할 수 있는지 말해 줄 수 있어요. 미리 감사드립니다.gridview에서 드롭 다운 목록을 바인딩하는 방법은 무엇입니까?
답변
템플릿 열을 사용하는 경우 데이터 바인딩 표현식을 사용하여 마크 업에서 드롭 다운을 바인딩 할 수 있습니다. 예 :
<asp:TemplateField HeaderText="XYZ">
<ItemTemplate>
<asp:DropDownList runat="server" ID="MyDD" DataSourceId="MyDataSource" />
</ItemTemplate>
</asp:TemplateField>
위의 예는 드롭 다운 데이터가 여러 행에 걸쳐 일정하다고 가정합니다. 이 변화 경우에 당신은 GetDropDownData이 지정된 행의 데이터 (데이터 테이블,리스트, 배열)을 반환하는 코드 숨김에서 보호 방법이 될 것 같은
<asp:DropDownList runat="server" DataSource='<%# GetDropDownData(Container) %>' DataTextField="Text" DataValueField="Value" />
로 데이터 바인딩 식을 사용할 수 있습니다.
코드 숨김에서 GridView.RowDataBound 이벤트 (또는 RowCreated 이벤트)를 사용하여 드롭 다운을 채울 수 있습니다. 예를 들어,
protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
// Find the drop-down (say in 3rd column)
var dd = e.Row.Cells[2].Controls[0] as DropDownList;
if (null != dd) {
// bind it
}
/*
// In case of template fields, use FindControl
dd = e.Row.Cells[2].FindControl("MyDD") as DropDownList;
*/
}
}
는 제안 된 방법 이외에, 당신은이 방법으로, 마크 업 내에서 컨트롤을 바인딩 할 수 있습니다
<asp:GridView ID="MyGrid" runat="server" DataSourceID="MyDataSource1">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind ("CustomerId") %>' DataSourceID="CustomersDataSource" DataTextField="CustomerName" DataValueField="CustomerId" >
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void gvSalesAppData_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlCurrentPhase = (DropDownList)e.Row.FindControl("ddlCurrentPhase");
DropDownList ddlProductFamily = (DropDownList)e.Row.FindControl("ddlProductFamily");
DropDownList ddlProductGroup = (DropDownList)e.Row.FindControl("ddlProductGroup");
DropDownList ddlETProgramManager = (DropDownList)e.Row.FindControl("ddlETProgramManager");
DropDownList ddlPLMForTheProduct = (DropDownList)e.Row.FindControl("ddlPLMForTheProduct");
TrackingToolObj.BindCurrentPhases(ddlCurrentPhase);
TrackingToolObj.BindCurrentPhases(ddlProductFamily);
TrackingToolObj.BindProductGroups(ddlProductGroup);
TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlETProgramManager, (int)OSAEnums.RoleTypes.ProgramManager, false);
TrackingToolObj.GetEmployeesBasedOnRoleTypeId(ddlPLMForTheProduct, (int)OSAEnums.RoleTypes.PLM, false);
}
}
가의 GridView
바인딩 아래는 GridView 컨트롤을 데이터로 바인딩하는 코드 여기
C#을
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.BindData();
}
}
private void BindData()
{
string query = "SELECT top 10 * FROM Customers";
SqlCommand cmd = new SqlCommand(query);
gvCustomers.DataSource = GetData(cmd);
gvCustomers.DataBind();
}
private DataTable GetData(SqlCommand cmd)
{
string strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
return dt;
}
}
}
}
답을 수정하고 코드를 읽을 수 있도록 형식을 지정하십시오. – kleopatra
솔직히 말하면, 그렇게하는 것이 좋습니다. gridview에 500 개의 행이 있다면 데이터베이스를 500 번 쿼리 할 것입니까? 이 작업을 수행해야하는 경우 드롭 다운 목록의 항목에 대한 데이터로 데이터 집합을 채우고 위에 표시된 것처럼 RowDataBound 이벤트에서 DataSet을 드롭 다운 목록에 바인딩합니다. –
은 gridview에
<asp:GridView ID="grvExcelData" runat="server" onrowdatabound="GridView2_RowDataBound">
<HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="DrdDatabase" Width="100px" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
하고있는 gridview에 대한 RowDataBound
이벤트는 RowCreated 이벤트에 대한
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
string cities = "maxico,chennai,newdelhi,hongkong";
string [] arr = cities.Split(',');
// Instead of string array it could be your data retrieved from database.
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DrdDatabase");
foreach (string colName in arr)
ddl.Items.Add(new ListItem(colName));
}
}
이것은 데이터베이스에 바인딩되어있는 대신 도시 배열에 연결되어있는 것처럼 보입니다. 사용자가 드롭 다운을 변경하면 데이터베이스가 어떻게 업데이트됩니까? –
- 1. 드롭 다운 목록을 바인딩하는 방법
- 2. Webform Gridview에서 드롭 다운 목록을 어떻게 동적으로로드합니까?
- 3. PHP/HTML 다른 드롭 다운 목록을 여는 드롭 다운 목록을 작성하는 방법은 무엇입니까?
- 4. 사용자 정의 유형의 드롭 다운 목록에 데이터 바인딩하는 방법은 무엇입니까?
- 5. Watin : 드롭 다운 목록을 가져
- 6. 아이폰에 드롭 다운 목록을 만드는 방법은?
- 7. gridview에서 드롭 다운 선택 값을 렌더링
- 8. 드롭 다운 목록을 int로 변환
- 9. 드롭 다운 목록을 추가하는 방법
- 10. 다른 드롭 다운 목록으로 드롭 다운 목록을 설정하는 방법
- 11. xajax.getFormValues를 사용하여 값 드롭 다운 목록을 가져 오는 방법은 무엇입니까?
- 12. 드롭 다운 목록을 사용하여 사진을 변경하는 방법은 무엇입니까?
- 13. CSS가있는 드롭 다운 목록을 비활성화하여 회색으로 표시되는 방법은 무엇입니까?
- 14. 다른 값을 기반으로 드롭 다운 목록을 채우는 적절한 방법은 무엇입니까?
- 15. 드롭 다운 목록을 채우는 가장 좋은 방법은 무엇입니까?
- 16. MDX를 사용하여 .net 드롭 다운 목록을 채우는 방법은 무엇입니까?
- 17. "새로운 가치"옵션을 사용하여 드롭 다운 목록을 만드는 방법은 무엇입니까?
- 18. Mootools를 사용하여 드롭 다운 목록을 만드는 방법은 무엇입니까?
- 19. 콤보 상자 드롭 다운 목록을 사용자 정의하는 방법은 무엇입니까?
- 20. 하나의 컨트롤에서 텍스트 상자와 드롭 다운 목록을 수행하는 방법은 무엇입니까?
- 21. html 및 css로만 드롭 다운 목록을 만드는 방법은 무엇입니까?
- 22. Java Swing : JComboxBox 드롭 다운 목록을 높이는 방법은 무엇입니까?
- 23. RibbonComboBox에 데이터베이스의 목록을 바인딩하는 방법은 무엇입니까?
- 24. SpringMvc 컨트롤러에 객체 목록을 바인딩하는 방법은 무엇입니까?
- 25. ASP MVC에서 ViewModel 목록을 바인딩하는 방법은 무엇입니까?
- 26. 월/연도로 드롭 다운 목록을 채우십시오.
- 27. 선택 드롭 다운 목록을 쓸 수 없음
- 28. 드롭 다운 목록을 통해 행을 숨기기
- 29. 캐싱 방식으로 드롭 다운 목록을 채우고 첫 번째 값 앞에 각 드롭 다운 목록을 설정하십시오.
- 30. asp.net MVC 웹 응용 프로그램의 다른 드롭 다운 목록을 사용하여 드롭 다운 목록을 필터링하는 방법
어떤 것입니까? 다른 하나를 선호하는 이유가 있을까요? – Tim
@Tim, RowCreated도 작동합니다. 그러나 첫 번째 시간에만 그리드를 바인딩하는 경우 (그리고 포스트 백이 아님) 'RowCreated'는 확실히 모든 포스트 백에서 실행되지만 'RowDataBound'에서는 발생하지 않을 것이라고 확신합니다 (여기서는 100 % 확신하지 못합니다). 따라서 이러한 경우에는 드롭 다운을 채우기 위해 뷰 상태에 의존 할 수 있습니다. 개인적으로 나는 마크 업 경로를 선호한다. – VinayC
코드에서 SQL 인스턴스를 선언했다고 가정합니다. 코드에서 그리드 뷰를 이미 바인딩 한 경우 다른 솔루션이 필요합니다. 즉, DataSourceId = "MyDataSource" –