2013-03-03 57 views
1

我正在创建一个包含一个Dropdownlist和Gridview的网页。从下拉列表动态填充表格并在Gridview中显示

查询是Dropdownlist将包含SQL Server数据库表列表。当我从下拉列表中选择一个表名时,Gridview需要显示整个表数据并能够执行编辑,更新,删除,取消操作。

当我点击编辑Gridview需要显示更新和取消按钮,它更新应更新dropdownlist表,并删除。

我的代码如下这样:

Html页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DataGridView_Sample._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Untitled Page</title> 
    <style type="text/css"> 
     .style1 
     { 
      font-weight: bold; 
      text-decoration: underline; 
      font-size: x-large; 
      text-align: center; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <h5 class="style1"> 
      Data Grid View Sample</h5> 

    </div> 
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" 
    onselectedindexchanged="DropDownList1_SelectedIndexChanged"> 
     <asp:ListItem Text="-- Select --" Value=""></asp:ListItem> 
     <asp:ListItem Text="Emp" Value="Emp"></asp:ListItem> 
     <asp:ListItem Text="Dept" Value="Dept"></asp:ListItem> 
    </asp:DropDownList> 

    <br /> 
    <br /> 
    <b>Grid View:</b> 
    <br /> 
    <br /> 

    <asp:GridView ID="GridView1" runat="server" Height="181px" 
     onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating" 
     Width="518px"> 
     <Columns> 
      <asp:CommandField ButtonType="Button" ShowEditButton="True" /> 
     </Columns> 
     <EmptyDataTemplate> 
      &nbsp; 
     </EmptyDataTemplate> 
    </asp:GridView> 
    </form> 

</body> 
</html> 

.aspx页面中的代码:

namespace DataGridView_Sample 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     SqlConnection con = new SqlConnection("Data Source=SHINY-PC\\SQLEXPRESS;Initial Catalog=NRK;Integrated Security=True"); 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     DataTable dt = new DataTable(); 
     DataSet ds = new DataSet(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       con.Open(); 
       cmd = new SqlCommand("Select name from sys.tables order by name", con); 
       da = new SqlDataAdapter(cmd); 
       da.Fill(ds); 
       DropDownList1.DataSource = ds; 
       DropDownList1.DataTextField = "name"; 
       DropDownList1.DataValueField = "name"; 
       DropDownList1.DataBind(); 
       DropDownList1.Items.Insert(0, new ListItem("--Select--", "--Select--")); 
      } 
     } 

     protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (DropDownList1.SelectedIndex != 0) 
      { 
       cmd = new SqlCommand("select * from " + DropDownList1.SelectedItem.Value, con); 
       con.Open(); 
       da = new SqlDataAdapter(cmd); 
       da.Fill(dt); 
       GridView1.DataSource = dt; 
       GridView1.DataBind(); 
       con.Close(); 
      } 
     } 

     protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) 
     { 
      cmd = new SqlCommand("select * from " + DropDownList1.SelectedItem.Value, con); 
      con.Open(); 
      da = new SqlDataAdapter(cmd); 
      da.Fill(dt); 
      GridView1.EditIndex = Convert.ToInt16(e.NewEditIndex); 
      GridView1.DataSource = dt; 
      GridView1.DataBind(); 
      con.Close(); 
     } 

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

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

请任何一个可以提供帮助。

在此先感谢。

+1

你有什么问题或错误? – 2013-03-03 18:38:28

+0

如果你问的是你如何预测需要更新的列(我假设并非所有的表都具有相同的列名),那么您需要即时构建更新语句。也许你可以将列信息存储在一个包含2列,表名和列名的表中?然后从这些信息构建更新声明? – Melanie 2013-03-05 22:09:46

+0

代码为GridView1_RowUpdating,GridView1_RowCancelingEdit事件。它使用Dropdownlist动态地将数据从sql表填充到Gridview。 – user2128849 2013-03-06 09:51:49

回答

0

鉴于上述情况,我会创建一个包含两个字段的数据库表:tablename和columnname。将有4行tablename = emp,每行将有一个columnname = emp表中的一列。同样,将有6行where tablename = dept,每行将有一个columnname = dept表中的一列。然后,在GridView1_RowUpdating事件中,可以根据DropDownList中选择的表从数据库中提取列的名称,并使用该表的任何存储过程进行相应更新。在GridView1_RowCancelingEdit,您需要做的仅仅

GridView1.EditIndex = -1; 

,并重新绑定您的数据(你所需要的是一种方法),你就大功告成了。