私は先に尋ねたように this をしようとしています。私が見つけた唯一の違いは、上記のコードに含まれていた追加のリストアイテムです。
_AppendDataBoundItems=true
_を使おうとしましたが、まだ機能しません。また、デフォルト値をitemtemplateのラベルに表示されていた値(DropDownListのSelectedValue='<%# Eval("DepartmentName") %>'
)に設定したいのですが、このプロパティはドロップダウンリストでは使用できません。その理由は何でしょうか。 ??
_<EditItemTemplate>
<asp:DropDownList ID="ddlDepartment_Edit" runat="server"
DataSourceID="dsDepartment_Edit" DataTextField="DepartmentName"
DataValueField="PK_DepartmentId">
</asp:DropDownList>
<asp:SqlDataSource ID="dsDepartment_Edit" runat="server"
ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>"
ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown"
SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>' >
</asp:Label>
</ItemTemplate>
_
GridView
を使用しています
DataValueField
は間違っているようです-DepartmentId
ではないでしょうか?同様に、SelectedValue='<%# Eval("**DepartmentId**") %>'
--DepartmentName
はSeletectText
になります。
GridView_DataBound
イベントハンドラーを使用すると、問題が解決します。
あなたの場合、PK_DepartmentId
値を保存するためにHiddenField
を追加する必要があります。
<asp:GridView ID="gvExample" runat="server" AutoGenerateColumns="False" OnDataBound="gvExample_DataBound">
<Columns>
<asp:TemplateField HeaderText="Department">
<EditItemTemplate>
<asp:DropDownList ID="ddlDepartment_Edit" runat="server" DataSourceID="dsDepartment_Edit"
DataTextField="DepartmentName" DataValueField="PK_DepartmentId">
</asp:DropDownList>
<asp:HiddenField ID="hfDepartmentId" runat="server" Value='<%# Bind("PK_DepartmentId") %>' />
<asp:SqlDataSource ID="dsDepartment_Edit" runat="server" ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>"
ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" ButtonType="Button" />
</Columns>
</asp:GridView>
protected void gvExample_DataBound(object sender, EventArgs e)
{
foreach (GridViewRow gvRow in gvExample.Rows)
{
DropDownList ddlDepartment = gvRow.FindControl("ddlDepartment_Edit") as DropDownList;
HiddenField hfDepartmentId = gvRow.FindControl("hfDepartmentId") as HiddenField;
if (ddlDepartment != null && hfDepartmentId != null)
{
ddlDepartment.SelectedValue = hfDepartmentId.Value;
}
}
}
行の条件が変化したときに特別に作成されたGridView
メソッドがあるのに、なぜループの使用を提案しているのですか?RowDataBound()
?
protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow gvRow = (GridViewRow)e.Row;
HiddenField hfAgentID = (HiddenField)gvRow.FindControl("hfAgentID");
if (hfAgentID != null)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddlAgent = (DropDownList)gvRow.FindControl("ddlAgent");
ddlAgent.SelectedValue = hfAgentID.Value;
}
}
}
グリッドには、ItemCommand
というイベントがあります。そのためのメソッドを作成します。
protected void Grid1_ItemCommand(object source, GridCommandEventArgs e)
次に、ユーザーがグリッドの編集ボタンをクリックしたことを認識するcaseステートメントを作成します。
case Grid.EditCommandName:
//set a member variable to the string of the cell you are editing.
//something like: mString = e.item..["Column"].toString();
break;
これで、ドロップダウンがロード/レンダリングされる前に、選択する文字列にメンバー変数が設定されました。 OnPrerender
にイベントOnLoad
またはdropdownbox
を使用し、選択したアイテムをこの文字列に設定します。
これは私が見つけた最高のものです....
protected void GridView1_DataBound(object sender, EventArgs e)
{
foreach (GridViewRow gvRow in GridView1.Rows)
{
RadioButtonList rbl = gvRow.FindControl("rblPromptType") as RadioButtonList;
HiddenField hf = gvRow.FindControl("hidPromptType") as HiddenField;
if (rbl != null && hf != null)
{
if (hf.Value != "")
{
//clear the default selection if there is one
rbl.ClearSelection();
}
rbl.SelectedValue = hf.Value;
}
}
}