Menampilkan data pada kolom tampilan kisi secara terprogram

Saya memiliki daftar jumlah produk dan tampilan kotak. Tampilan grid sudah terikat pada beberapa data. Tapi saya ingin menampilkan daftar jumlah produk di kolom ketiga tampilan grid. Berikut adalah kode di balik cara saya mengikat data ke tampilan kisi:

gvProduct.DataSource = distSPUItem;
gvProduct.DataBind();
BoundField column = new BoundField(); 
column = new BoundField();
column.HeaderText = "Unit Quantity";
for (int index = 0; index < productQuantityList.Count; index++)
{
   column.DataField = index.ToString();
}
gvProduct.Columns.Add(column);

Saya perlu menelusuri daftar kuantitas produk dan menampilkan hasilnya di kolom ketiga tampilan kisi. Namun, kolom tersebut tidak muncul. Ada solusi?

Terima kasih sebelumnya.

Bagian yang Diedit

protected void gvProduct_RowDataBound(Object sender, GridViewRowEventArgs e)
    {
        int unitQuantity = 0;
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            for(int index = 0; index < productQuantityList.Count; index++)
            {
                unitQuantity = productQuantityList[index];
            }
            Label lblUnitQuantity = (Label)e.Row.FindControl("lblUnitQuantity");
            lblUnitQuantity.Text = unitQuantity.ToString();
        }
    }

person Community    schedule 01.01.2014    source sumber
comment
Apa jenis distSPUItem dan productQuantityList?   -  person ekad    schedule 01.01.2014
comment
distSPUItem diambil dari kelas, List‹DistributionStandardPackingUnitItems› distSPUItem = new List‹DistributionStandardPackingUnitItems›();. productQuantityList adalah tipe integer. Apakah saya salah mendefinisikan kolom baru?   -  person    schedule 01.01.2014


Jawaban (2)


Akan lebih baik jika Anda melakukannya di RowDataBound acara. Pertama, Anda perlu menambahkan kolom dan OnRowDataBound="gvProduct_RowDataBound" dalam kode aspx:

<asp:GridView ID="gvProduct" runat="server" AutoGenerateColumns="False" OnRowDataBound="gvProduct_RowDataBound">
    <Columns>
        <!-- Existing columns here  -->
        <asp:TemplateField HeaderText="Unit Quantity">
            <ItemTemplate>
                <asp:Label ID="lblUnitQuantity" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Kemudian atur nilai teks lblUnitQuantity dalam metode gvProduct_RowDataBound pada kode di belakang:

protected void gvProduct_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        int unitQuantity = productQuantityList[e.Row.RowIndex];
        Label lblUnitQuantity = (Label)e.Row.FindControl("lblUnitQuantity");
        lblUnitQuantity.Text = unitQuantity.ToString();
    }
}

Catatan: gvProduct_RowDataBound akan dieksekusi untuk setiap baris dari sumber data, jadi jika distSPUItem memiliki 10 item, maka gvProduct_RowDataBound akan dieksekusi 10 kali sambil menambah nilai e.Row.RowIndex mulai dari 0. Kode di atas hanya akan berfungsi jika productQuantityList dan distSPUItem memiliki nomor yang sama item, jika tidak maka akan terjadi kesalahan.

Lihat di sini untuk informasi lebih lanjut mengenai acara RowDataBound.

person ekad    schedule 01.01.2014
comment
Saya mendapat daftar productQuantityList 1,2,1,1,2,2,2,2,2,2. Namun, ketika saya melakukannya dalam metode RowDataBound, ia mengembalikan saya semua 2,2,2... Bisakah Anda membantu saya memeriksa bagian yang diedit? - person ; 01.01.2014
comment
Saya harus menyimpan kuantitas dalam daftar terlebih dahulu karena daftar tersebut diambil dari bagian lain kode saya dan ini sangat rumit. - person ; 01.01.2014
comment
Maksudnya baris pertama harus 1, baris kedua harus 2, baris ketiga dan keempat harus 1, dan sisanya harus 2? - person ekad; 01.01.2014
comment
Yup productQuantityList adalah bilangan bulat - person ; 01.01.2014
comment
Berhasil. Dan ya, ketika saya menambahkan item ke distSPUItem, saya menambahkan kuantitas ke productQUantityList juga di bagian kode saya yang lain. Namun maukah Anda menjelaskan sedikit tentang metode RowDataBound? - person ; 01.01.2014
comment
Menambahkan beberapa penjelasan dalam jawaban saya. - person ekad; 01.01.2014

Saya akan mencoba menyelesaikan masalah dengan cara ini:

Katakanlah Anda memiliki item produk, kira-kira seperti ini:

public class Product
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }

    public Product(string data1, string data2)
    {
        Data1 = data1;
        Data2 = data2;
    }
}

Jika Anda menginginkan informasi tambahan, seperti semacam indeks, buatlah kelas seperti ini:

public class ProductExtended
{
    public string Data1 { get; set; }
    public string Data2 { get; set; }
    public int Index { get; set; }

    public ProductExtended(Product product, int index)
    {
        Data1 = product.Data1;
        Data2 = product.Data2;
        Index = index;
    }
}

Kemudian konversikan daftar item Produk ke daftar item ProductExended:

List<Product> products = new List<Product>();
// ...

int i = 0;
List<ProductExtended> productsExtended = products.Select(p => new ProductExtended(p, i++)).ToList();

Dan terakhir ikat daftar baru itu ke grid Anda.

person mrzli    schedule 01.01.2014
comment
Terima kasih atas usahanya dan saya ingin mencobanya. Namun, ada banyak logika untuk bagian kode saya yang lain untuk mendapatkan item di productQuantityList dan saya tidak dapat mengubahnya. - person ; 01.01.2014