3

List<string[]> itemsコード内に文字列の配列で満たされたリストがあります。ASPXページで、新しいグリッドビューコントロールを追加しました。

<asp:GridView ID="ProductList" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ProductID" EnableViewState="False">
  <Columns>
    <asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
    <asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True" SortExpression="CategoryName" />
    <asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True" SortExpression="SupplierName" />
    <asp:BoundField DataField="UnitPrice" DataFormatString="{0:C}" HeaderText="Price" HtmlEncode="False" SortExpression="UnitPrice" />
    <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" SortExpression="Discontinued" />
  </Columns>
</asp:GridView>

次のような方法で、グリッドビューのDataSourceID属性を指定する必要があることを知っています。

<asp:GridView ... `DataSourceID="ObjectDataSource1" ... > 
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetProducts" TypeName="ProductsBLL">
</asp:ObjectDataSource>

しかし、私は何をするのかわかりませんOldValuesParameterFormatStringSelectMethodそしてTypeName属性は何を表しますか。また、バインドするデータベースがありません。という名前の文字列配列のリストがありますitems。グリッドビューにデータを入力するのを手伝ってもらえますか?バインディングを介してそれを行う必要はまったくありません。ありがとう!

4

3 に答える 3

7

ObjectDataSourceも必要ありません。コードビハインドのPage_Loadで、文字列配列リストを解析し、その場でDataTableを作成できます。

Not Page.IsPostbackポストバックで再バインドされないように、これをラップするようにしてください。

List<string[]> stringList = null;

DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add("ProductName", System.Type.GetType("System.String"));
dt.Columns.Add("CategoryName", System.Type.GetType("System.String"));
dt.Columns.Add("SupplierName", System.Type.GetType("System.String"));
dt.Columns.Add("UnitPrice", System.Type.GetType("System.Double"));
dt.Columns.Add("Discontinued", System.Type.GetType("System.String"));

foreach (string[] s in stringList) {
    foreach (string str in s) {
        dr = dt.NewRow();
        dr["ProductName"] = s[0];
        dr["CategoryName"] = s[1];
        dr["SupplierName"] = s[2];
        dr["UnitPrice"] = s[3];
        dr["Discontinued"] = s[4];
        dt.Rows.Add(dr);
    }
}

dt.AcceptChanges();
ProductList.DataSource = dt;
ProductList.DataBind();
于 2012-10-18T15:43:21.147 に答える
0

編集:ニーズに合わせて、このコードの一部を変更する必要があります。私はあなたが提供したコードにstring[]基づいてあなたに保存されたデータ型を仮定しています。GridView

classの代わりに、アイテムに使用するを作成することを検討することをお勧めしますstring[]。多分次のようなものです:

public class MyObject
{
    public string ProductName { get; set; }
    public string CategoryName { get; set; }
    public string SupplierName { get; set; }
    public decimal UnitPrice { get; set; }
    public bool Discontinued { get; set; }
}

string[]次に、に変換するための何かが必要になりますMyObject

private MyObject ConvertToMyObject(string[] values)
{
    var myObject = new MyObject();
    myObject.ProductName = values[0];
    myObject.CategoryName = values[1];
    myObject.SupplierName = values[2];

    decimal unitPrice;
    if (decimal.TryParse(values[3], out unitPrice))
    {
        myObject.UnitPrice = unitPrice;
    }

    bool discontinued;
    if (boo.TryParse(values[4], out discontinued))
    {
        myObject.Discontinued = values[4];
    }
}

次に、コードでそのメソッドを使用して、バインドすることができます。

protected void Page_Load(parameters here)
{
    if (IsPostback)
    {
        var myObjects = new List<MyObject>();
        foreach (string[] values in items)
        {
            myObjects.Add(ConvertToMyObject(values));
        }

        ProductList.DataSource = myObjects;
        ProductList.DataBind();
    }
}

コメントで述べたようitemsに、Page_Loadイベントハンドラーでアクセスできることを確認してください。また、これをメモリから入力しました。のパラメータを忘れましたPage_LoadPage_Loadただし、コードの背後にハンドラーが既に含まれている可能性があります。

于 2012-10-18T15:45:31.787 に答える
0

これを試すことができます

List<string[]> items = List<string[]>();
//add items to List

GridView1.DataSource = items;
GridView1.DataBind();

あなたのGridView

<asp:GridView runat="server" ID="GridView1">
<Columns>
<asp:TemplateField>
<ItemTemplate>
   <asp:Label ID="stringLabel" Text="<%# Container.DataItem %>" runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
于 2012-10-18T16:12:48.493 に答える