วิธีผูก DataTable ใหม่กับ Gridview ซึ่งมี DataTable เก่าอยู่แล้ว

ฉันมี gridview ซึ่งผูกไว้กับ DataTable ณ รันไทม์ ตามการเลือกของผู้ใช้ คอลัมน์ของ DataTable สามารถเปลี่ยนแปลงได้ จากนั้นฉันต้องผูก DataTable เข้ากับ Gridview เดียวกัน หากผู้ใช้ทำเช่นนั้น ระบบจะล้มเหลวเนื่องจาก gridview ค้นหาชื่อคอลัมน์เดียวกัน

ฉันจะทำความสะอาด gridview ทั้งหมดและผูก datatable ใหม่ซ้ำแล้วซ้ำอีกได้อย่างไร

นี่คือวิธีที่ฉันผูกข้อมูล ทุกครั้งที่มีการเปลี่ยนชื่อคอลัมน์

DataTable result = dt_to_result_bolge_kiyaslama(dt);
gv_kiyaslama.DataSource = result;
gv_kiyaslama.DataBind();

person Arif YILMAZ    schedule 12.03.2014    source แหล่งที่มา
comment
วิธีที่ง่ายที่สุดคือเริ่มต้น gridview อีกครั้งหรือฉันเข้าใจอะไรผิดหรือเปล่า?   -  person Lukas Häfliger    schedule 12.03.2014
comment
คุณใช้คอลัมน์ที่สร้างขึ้นอัตโนมัติใน gridview ของคุณหรือไม่?   -  person Andrew Backes    schedule 12.03.2014
comment
คุณช่วยแสดงรหัสของคุณให้ฉันดูได้ไหม   -  person Pragnesh Khalas    schedule 12.03.2014


คำตอบ (1)


คุณอาจกำลังมองหาวิธีสร้างคอลัมน์ Grid View ใหม่ในขณะดำเนินการ บทความ CodeProject.com นี้อาจเป็นตั๋ว: วิธีสร้างคอลัมน์แบบไดนามิกในมุมมองตาราง

ตัวอย่างโค้ด ASP บางส่วน:

<asp:GridView ID="MyGrid" runat="server" AutoGenerateColumns="false">
    <Columns />
</asp:GridView>

และตัวอย่างวิธี C#:

public void RegenerateColumns(GridView grid, DataTable data, IDictionary<string, string> columnText)
{
    grid.Columns.Clear();

    foreach (DataColumn col in data.Columns)
    {
        grid.Columns.Add(new BoundField()
        {
            DataField = col.ColumnName,
            HeaderText = columnText.ContainsKey(col.ColumnName)
                ? columnText[col.ColumnName]
                : col.ColumnName
        });
    }
}

ตอนนี้ใช้:

DataTable table = new DataTable();
table.Columns.Add(...); // add "NAME" column
table.Columns.Add(...); // add "DESCRIPTION" column

// Create mapping of column names to text visible to the user
Dictionary<string, string> cols = new Dictionary<string, string>()
{
    { "NAME", "Name" },
    { "DESCRIPTION", "Description" }
};

// Call method:
RegenerateColumns(MyGrid, table, cols);

// Rebind the data to the grid
MyGrid.DataSource = table;
MyGrid.DataBind();
person Greg Burghardt    schedule 12.03.2014
comment
สิ่งนี้จะอธิบายวิธีการผูกกริดแบบไดนามิก ฉันสามารถทำได้สำเร็จ แต่ถ้าฉันเปลี่ยนชื่อคอลัมน์และผูกมันอีกครั้งเป็นตารางเดียวกัน มันก็จะล้มเหลวเพราะค้นหาชื่อคอลัมน์เก่า - person Arif YILMAZ; 12.03.2014
comment
บทความนี้จะอธิบายสิ่งที่คุณต้องการ ฉันจะอัปเดตคำตอบของฉัน - person Greg Burghardt; 12.03.2014
comment
นั่นไม่ใช่วิธีที่ดี ฉันรอคอยที่จะพบฟังก์ชั่นเช่น clear() - person Arif YILMAZ; 12.03.2014
comment
มีฟังก์ชัน clear: GridView.Columns.Clear() -- ล้างคอลัมน์ในตาราง - person Greg Burghardt; 12.03.2014
comment
ฉันรู้แต่ถ้าฉัน clear() มันจะไม่ยอมรับคอลัมน์ของ datatable ที่สอง - person Arif YILMAZ; 12.03.2014
comment
คุณได้อ่านโพสต์ในบล็อกที่ฉันลิงก์ไป หรือดูตัวอย่างโค้ดที่ฉันโพสต์หรือไม่ หลังจากการล้างคอลัมน์แล้ว คุณต้องสร้างคอลัมน์เหล่านั้นอีกครั้งโดยทางโปรแกรม - person Greg Burghardt; 12.03.2014