0

動的データベースから.netに戻るデータGridviewがあり、フィールドの1つにセミコロンで区切られた値の長いリストがあります。セミコロンの代わりに改行を使用してこのデータを表示できましたが、このフィールドには最大20の値が含まれる可能性があるため、これを表示するためのより良い方法があると確信しています。

次のコードを使用して、テンプレートフィールドを作成および修正しました。

<asp:TemplateField HeaderText="Amalgamation"
                    SortExpression="Amalgamation">
                    <ItemTemplate>
                        <%# Eval("Amalgamation").ToString().Replace(";", "<br />")%>
                    </ItemTemplate>
                </asp:TemplateField>

このフィールドに入力されるデータの例は次のとおり100001;100002;600001;600006です。

更新:私はこれを試しましたが、喜びはありませんでした。HTMLで:

<%#PopulateArray((string)(Eval("Amalgamation")))%> <asp:DropDownList ID="ddlStrings" AutoPostBack="true" runat="server"></asp:DropDownList>

次に、コードビハインドでこの関数を実行します。

public object PopulateArray(string s) 
{ 
string[] sArray = s.Split(';'); 
DropDownList ddl = new DropDownList(); 
ddl = (DropDownList)this.Page.FindControl("ddlStrings"); 
ddl.DataSource = sArray; 
ddl.DataBind();
return sArray;
}

次の行でNullReferenceExceptionが発生します:ddl.DataSource = sArray

4

4 に答える 4

1

このデータだけを表示したいと思います。ユーザーがデータを編集できるようにしたいが、データを区切り文字列に再構成できるようにしたい場合、それははるかに複雑な問題です。データベースへのデータの保存方法を再検討する必要があるかもしれません。 。

区切られた文字列を文字列の配列に変換する最も簡単な方法は、次のString.Split方法を使用することです。

string s = "111;333;555;";
string[] sParts = s.Split(";");

ただし、文字列を分割する必要があるだけでなく、文字列を何かにバインドする必要があるため、バインディング式ではなく、コードビハインドでこれを行う必要がある場合があります。いくつかのオプションがあります:あなたはBulletedListウェブコントロールが好きかもしれません。

于 2013-01-16T17:38:42.903 に答える
0

それは可能だと思いますが、表示用であればドロップダウンにバインドする必要はありません。マークアップを追加するだけで、標準のhtmlドロップダウンリストを作成できます。

ファンシーになりたい場合は、最初のいくつかの項目を表示するhtml、さらにある場合は「...」、およびマウスオーバーしたときにリスト全体を表示するように展開するスクリプトを返す関数はどうでしょうか。 、またはそのようなもの?

于 2013-01-16T17:43:22.927 に答える
0

OK私はそれの底を持っています。ドロップダウンの各行インスタンスを参照するのではなく、ドロップダウンのIDを参照していました。パラメータを使用して、グリッドビューの行作成イベントにコードを配置します。

onrowcreated="ArrayDataView_RowCreated"

テーブルに行が作成されるたびに、セミコロン区切り文字を使用して結果を分割しました。また、データベースに使用していたオブジェクトクラス( "MyData")を使用して各結果をキャストしました。次に、「if」ステートメントを使用して、グリッドビューのヘッダーとフッターのデータ行をフィルターで除外する必要がありました。コードビハインドで作成された行のコードは次のとおりです。

    protected void ArrayDataView_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList ddl = (DropDownList)e.Row.FindControl("ddlStrings");
            ddl.DataSource = (e.Row.DataItem as MyData).Amalgamation.Split(';');
        }       
    }
}

aspxページにeval関数をドロップすると、グリッドビューのアイテムテンプレートがドロップダウンを格納するように縮小されました。

<ItemTemplate>
<asp:DropDownList ID="ddlStrings" AutoPostBack="false" runat="server"></asp:DropDownList></ItemTemplate>

助けてくれたすべての人に感謝します!

于 2013-01-17T17:34:55.693 に答える
0

ドロップダウンにバインドするのは良い考えのようです...これを編集する必要がある場合は<EditItemTemplate>、目的を表示するためにこれで十分です...

于 2013-01-16T17:22:56.620 に答える