0

私のTT.aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AutoGenerateEditButton="true" OnRowEditing="GridView1_RowEditing" >
    <Columns>
        <asp:TemplateField>
        <ItemTemplate>
            <asp:Literal ID="lit1" Text='<%#Eval("E_Name")%>' runat="server">

            </asp:Literal>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:DropDownList ID="Eq" AppendDataBoundItems="true" runat="server" DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="Name">

            </asp:DropDownList>

        </EditItemTemplate>

        </asp:TemplateField>

    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [E_Name], [Problem], [Solution] FROM [Equipment] WHERE ([O_ID] = @O_ID)">
    <SelectParameters>
        <asp:QueryStringParameter Name="O_ID" QueryStringField="TT" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [Name] FROM [Parts]">
</asp:SqlDataSource>

私の TT.aspx.cs

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Literal xx = (Literal)GridView1.Rows[e.NewEditIndex].FindControl("lit1");
        String x =  xx.Text;
        DropDownList x1 = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("Eq");
        x1.SelectedValue = x;
    }

私はasp.netの初心者で、このコードでのみテストしています。私が抱えている問題は、最初のもの(リテラルの場合)が正しい値を返すのに対し、2番目FindControl("Eq")は常に返されることです。nullグリッドビューの編集インデックスを e.NewEditIndex に設定しようとしましたが、うまくいかないようです。

基本的に私がしたいことは、ユーザーが行の編集をクリックすると、ラベルにある元のデータバインド値がドロップダウンリストで選択されることです。

誰でもこれを案内してもらえますか?

4

1 に答える 1

0

このRowEditingイベントは、編集中の行インデックスを提供するだけです。編集行インデックスをグリッドに設定し、再バインドする必要があります。また、値を設定する必要がある場合、または内部でコントロールをバインドする必要がある場合は、イベントでグリッドを再バインドするため、イベントでそれEditItemTemplateを行う必要があります。これにより、イベントはのコントロールも提供します。RowDateBoundRowEditingRowDataBoundEditItemTemplate

この回答に示されているように

protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
  // grid view's edit index has been changed so rebind it
  gv.EditIndex = e.NewEditIndex;
}

protected void gv_RowDataBound(object sender, GridViewEditEventArgs e)
{
 if (e.Row.RowType == DataControlRowType.DataRow)
  {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
          ddList.SelectedValue = "set your value here";
        }
   }
}
于 2013-06-03T11:26:40.780 に答える