0

次のコードを使用して、グリッドビュー内のドロップダウンのデータソースを設定していますが、機能していません。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        DropDownList drop = (DropDownList)e.Row.FindControl("folderslist");
        drop.DataSource = list;
        drop.DataBind(); 

    }

listは文字列のリストであり、グリッドビューの外部にあるドロップダウンにfindをバインドします。ただし、上記のコードは、グリッドビュー内のドロップダウンにデータを入力しません。

<asp:GridView ID="GridView1" HorizontalAlign="Center" 
                                AutoGenerateColumns="false" CellSpacing="5" CellPadding="5" CssClass="GridView" Font-Size="Small"
                                runat="server" OnRowDataBound = "GridView1_RowDataBound" >

                         <Columns>


                         <asp:BoundField HeaderText="From" DataField="From" />

                         <asp:BoundField HeaderText="Subject" DataField="Subject" />

                         <asp:BoundField HeaderText="Received" DataField="Received" />





                         <asp:TemplateField HeaderText="Attachments" ItemStyle-HorizontalAlign="Center">
                                    <ItemTemplate>
                                        <asp:ImageButton runat="server" ID="attach" CommandName="viewattachments" Text="More"
                                            ImageUrl="~/images/notes.png" visible='<%# System.Convert.ToBoolean((DataBinder.Eval(Container.DataItem, "Attachments").ToString() == "") ? false : true) %>' />


                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                </asp:TemplateField>


                                <asp:TemplateField HeaderText="Move To" ItemStyle-HorizontalAlign="Center">
                                    <ItemTemplate>

                                      <asp:DropDownList ID="folderslist" runat="server"></asp:DropDownList>

                                    </ItemTemplate>
                                    <ItemStyle HorizontalAlign="Center"></ItemStyle>
                                </asp:TemplateField>

</Columns>
                            </asp:GridView>
4

3 に答える 3

0

asp:DropDownListはデータ ソース アイテムのプロパティにバインドされ、String 型にはその値を返すプロパティがありません。各文字列をヘルパー オブジェクトにラップしてみてください。

 class StringHolder 
 {
      public StringHolder(string displayText) { DisplayText = displayText; }
      public string DisplayText { get; set;}
 }


IList<StringHolder> WrapStrings(IList<string> strings)
{
    return strings.Select(it => new StringHolder(it)).ToList());

}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DropDownList drop = (DropDownList)e.Row.FindControl("folderslist");
    drop.DataTextField = "DisplayText";
    drop.DataSource   = WrapStrings(list);
    drop.DataBind(); 
}
于 2012-09-08T05:42:43.187 に答える
0

gridview のドロップダウンは ではありfoldersませんfolderlist。e.Row.FindControl() メソッドでフォルダーを指定します。コードをデバッグすると、何が起こっているのかを知ることができます。また、リストにデータがあることを確認してください。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DropDownList drop = (DropDownList)e.Row.FindControl("folders");
    drop.DataSource = list;
    drop.DataBind(); 

}
于 2012-09-08T05:07:50.747 に答える