ASP.NET - 具有多个DataSource的动态网格

时间:2009-08-25 07:27:02

标签: asp.net gridview

当我差不多完成我的申请时,最后一件事让我感到不安。

当我从DropDown列表中选择一个Item时,GridView1的列会出现两次:

alt text

这是我的aspx文件:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="WebmasterControlPanel.aspx.cs" Inherits="Ice_Web_Portal.UI.Webmaster.WebmasterControlPanel" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <table style="width: 288px">
        <tr>
            <td valign="top">
                <asp:DropDownList ID="tableNamesDropDownList1" runat="server" DataSourceID="UserTablesObjectDataSource1"
                    DataTextField="TableName" DataValueField="TableName" Width="256px" OnSelectedIndexChanged="tableNamesDropDownList1_SelectedIndexChanged" AutoPostBack="True">
                </asp:DropDownList><br />
                <asp:ObjectDataSource ID="UserTablesObjectDataSource1" runat="server"
                    SelectMethod="GetAllUserTableNames" TypeName="Ice_Web_Portal.BO.DBTables"></asp:ObjectDataSource>
            </td>
            <td style="width: 3px">
                &nbsp;</td>
            <td>
            </td>
        </tr>
        <tr>
            <td>
                <asp:GridView ID="GridView1" runat="server" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
                </asp:GridView>
            </td>
            <td style="width: 3px">
            </td>
            <td>
            </td>
        </tr>
        <tr>
            <td>
            </td>
            <td style="width: 3px">
            </td>
            <td>
            </td>
        </tr>
    </table>
</asp:Content>

这是我的代码隐藏:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;

using Ice_Web_Portal.BO;
using Ice_Web_Portal.ASP.NET.Utils;

namespace Ice_Web_Portal.UI.Webmaster
{
    public partial class WebmasterControlPanel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void tableNamesDropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            CreateGridView();
        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = Convert.ToInt32(e.CommandArgument);

            if (e.CommandName == "Edit")
            {
                GridView1.EditIndex = index;

                GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];

                string id = selectedRow.Cells[1].Text;
                string isbn = selectedRow.Cells[2].Text;

                CreateGridView();
            }
            else if (e.CommandName == "Update")
            {                
                LinkButton updateButton = (LinkButton)e.CommandSource;

                DataControlFieldCell dcfc = (DataControlFieldCell)updateButton.Parent;

                GridViewRow gvr = (GridViewRow)dcfc.Parent;

                ControlCollection cc = gvr.Cells[1].Controls;

                TextBox tb = (TextBox)cc[0];

                GridView1.EditIndex = -1;

                CreateGridView();
            }
        }

        private void UpdateTableData()
        {
        }

        private void CreateGridView()
        {
            GridView1.Columns.Clear();

            string tableName = tableNamesDropDownList1.SelectedItem.Text;

            TableNameEnum tableType = TableNameEnumUtility.ConvertToEnum(tableName);

            DataTable dataTable = null;

            if (tableType == TableNameEnum.Book)
            {
                dataTable = Book.GetBooksDataSet().Tables[0];
            }
            else if (tableType == TableNameEnum.Course)
            {
                dataTable = Course.GetCoursesDataSet().Tables[0];
            }
            else
            {
                dataTable = null;
            }

            //Adding Edit Button
            CommandField cf = new CommandField();
            cf.ShowEditButton = true;
            GridView1.Columns.Add(cf);

            if (dataTable != null)
            {
                foreach (DataColumn c in dataTable.Columns)
                {
                    BoundField boundField = new BoundField();

                    boundField.DataField = c.ColumnName;
                    boundField.HeaderText = c.ColumnName;

                    GridView1.Columns.Add(boundField);
                }
            }

            GridView1.DataSource = dataTable;
            GridView1.DataBind();
        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
        }

        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
        }

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试添加设置为false的自动生成列

  <asp:GridView ID="GridView1" runat="server" 
...
    AutoGenerateColumns="false">
                        </asp:GridView>

定义你的gridview