私はすべての行にドロップダウンリストが含まれている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
正直言って、それはやっかいな方法です。グリッドビューに500行がある場合は、データベースを500回クエリしますか? これを行う必要があるときは、ドロップダウンリストのアイテムのデータでデータセットを塗りつぶし、上記のようにRowDataBoundイベントでデータセットをドロップダウンリストにバインドします。 –
あなたの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. DataRowをGridViewにバインドする方法は?
- 3. ObjectdatasourceをGridviewにバインドする方法
- 4. gridviewでドロップダウンリストとヌルフィールドを組み合わせる方法は?
- 5. MVC5のドロップダウンリストでデータベースをバインドする方法は?
- 6. リピータ内でgridviewをバインドする方法はありますか?
- 7. WPFコードでGridViewの列幅をバインドする方法は?
- 8. MtcでDatatableを使用してドロップダウンリストをバインドする方法
- 9. ドロップダウンリストをwebgridの新しい行にバインドする方法は?
- 10. SharePointのテキストフィールドをドロップダウンリストにバインドする方法は?
- 11. asp.netのドロップダウンリストでツールチップをバインドする方法C#
- 12. ページロードイベントで複数のドロップダウンリストをバインドする方法
- 13. GridViewにテキストボックスとドロップダウンリストを入れて編集する方法
- 14. ASP.NetのGridViewのEditModeにドロップダウンリストを表示する方法C#?
- 15. GridViewでコントロールを動的にバインドする方法
- 16. ASP.NET Gridviewで辞書オブジェクトをバインドする方法
- 17. Gridviewのドロップダウンリスト
- 18. ASP.net Gridview Itemtemplateドロップダウンリスト
- 19. Gridviewフィルタのドロップダウンリスト
- 20. Gridview内のドロップダウンリストで選択した値を取得する方法は?
- 21. 2つのデータベースフィールドをドロップダウンリストにバインドする方法
- 22. 剣道のドロップダウンリストの文字列リストをバインドする方法
- 23. edititemtemplateのドロップダウンリストgridview asp.net
- 24. yii2 gridviewウィジェットのドロップダウンリスト
- 25. Angular JS 2ドロップダウンリストで選択したIDをモデルにバインドする方法は?
- 26. ボタンをGridViewにバインドする
- 27. XAMLを使用してGridViewのColumnCollectionにバインドする方法
- 28. 複数のドロップダウンリストをバインドするには
- 29. 行の編集時にgridviewの複数のドロップダウンリストをバインドできません
- 30. Windows Phone 7で実行時にGridviewをデータとバインドする方法は?
は何でしょうか? 1つを他のものよりも優先させる理由はありますか? – Tim
@Tim、RowCreatedも動作します。しかし、初めてグリッドをバインドする場合(ポストバックではなく)、 'RowCreated'はすべてのポストバックで確実に起動しますが、' RowDataBound'では発生しません(私は100%確信していません)。このような場合、ビューステートを使用してドロップダウンを埋め込むことができます。個人的には、マークアップルートが好きです。 – VinayC
これは、コード内にSQLインスタンスが宣言されていることを前提としています。コード内にグリッドビューを既にバインドしている場合は、別のソリューションが必要です。マークアップを使用してDataSourceId = "MyDataSource" –