用避免重复语句吧 第二个问题,用JS实现吧,可以看看 www.511book.com

解决方案 »

  1.   

    给你一个例子程序,你看了就明白了:<%@ Import Namespace="System.Data" %> 
    <%@ Import Namespace="System.Data.SqlClient" %> <html> <head> 
    <script language="C#" runat="server">     SqlConnection myConnection; 
        public DataTable StateIndex; 
    //  public Hashtable StateIndex;     protected void Page_Load(Object Src, EventArgs E) 
        { 
            myConnection = new SqlConnection("server=(local)\\NetSDK;database=pubs;Trusted_Connection=yes");         if (!IsPostBack) 
                BindGrid();         MakeDataTable(); 
    /*      StateIndex = new Hashtable(); 这是quickstart里使用的办法 
            StateIndex["CA"] = 0; 
            StateIndex["IN"] = 1; 
            StateIndex["KS"] = 2; 
            StateIndex["MD"] = 3; 
            StateIndex["MI"] = 4; 
            StateIndex["OR"] = 5; 
            StateIndex["TN"] = 6; 
            StateIndex["UT"] = 7;*/ 
        }     void MakeDataTable() 
        { 
            String selectstring="select distinct state from Authors order by state"; 
            SqlConnection conn=new SqlConnection("server=(local)\\NetSDK;database=pubs;Trusted_Connection=yes"); 
            SqlDataAdapter da=new SqlDataAdapter(selectstring,conn); 
            DataSet ds=new DataSet(); 
            da.Fill(ds,"state");         DataTable dt=ds.Tables["state"]; 
            int count=dt.DefaultView.Count;         StateIndex=new DataTable("States"); 
            DataColumn dc; 
            DataRow dr;         dc=new DataColumn(); 
            dc.DataType=Type.GetType("System.String"); 
            dc.ColumnName="Name"; 
            StateIndex.Columns.Add(dc);         dc=new DataColumn(); 
            dc.DataType=Type.GetType("System.Int32"); 
            dc.ColumnName="ID"; 
            StateIndex.Columns.Add(dc);         for(int i=0;i<count;i++) 
            { 
                dr=StateIndex.NewRow(); 
                dr["Name"]=dt.Rows[i][0]; 
                dr["ID"]=i; 
                StateIndex.Rows.Add(dr); 
            }         DataGrid2.DataSource=StateIndex.DefaultView; 
            DataGrid2.DataBind(); 
        }     int GetStateIndex(String StateName) 
        { 
            int index=0;         foreach(DataRow dr in StateIndex.Rows) 
            { 
                if(dr["Name"].ToString()==StateName) 
                { 
                    index=Int32.Parse(dr["ID"].ToString()); 
                    break; 
                } 
            }         return index; 
        }     public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E) 
        { 
            MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex; 
            BindGrid(); 
        }     public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E) 
        { 
            MyDataGrid.EditItemIndex = -1; 
            BindGrid(); 
        }     public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E) 
        { 
            if (Page.IsValid) 
            { 
                String updateCmd = "UPDATE Authors SET au_id = @Id, au_lname = @LName, au_fname = @FName, phone = @Phone, " 
                    + "address = @Address, city = @City, state = @State, zip = @Zip, contract = @Contract where au_id = @Id";             SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);             myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 11)); 
                myCommand.Parameters.Add(new SqlParameter("@LName", SqlDbType.NVarChar, 40)); 
                myCommand.Parameters.Add(new SqlParameter("@FName", SqlDbType.NVarChar, 20)); 
                myCommand.Parameters.Add(new SqlParameter("@Phone", SqlDbType.NChar, 12)); 
                myCommand.Parameters.Add(new SqlParameter("@Address", SqlDbType.NVarChar, 40)); 
                myCommand.Parameters.Add(new SqlParameter("@City", SqlDbType.NVarChar, 20)); 
                myCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NChar, 2)); 
                myCommand.Parameters.Add(new SqlParameter("@Zip", SqlDbType.NChar, 5)); 
                myCommand.Parameters.Add(new SqlParameter("@Contract", SqlDbType.NVarChar,1));             myCommand.Parameters["@Id"].Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];             String[] cols = {"LName","FName","Phone","Address","City","Zip"};             for (int i=0; i<6; i++) 
                { 
                    String colvalue = ((TextBox)E.Item.FindControl("edit_" + cols[i])).Text; 
                    myCommand.Parameters["@" + cols[i]].Value = colvalue; 
                }             myCommand.Parameters["@State"].Value = ((DropDownList)E.Item.FindControl("edit_State")).SelectedItem.ToString();             if (((CheckBox)E.Item.FindControl("edit_Contract")).Checked = true) 
                    myCommand.Parameters["@Contract"].Value = "1"; 
                else 
                    myCommand.Parameters["@Contract"].Value = "0";             myCommand.Connection.Open();             try 
                { 
                    myCommand.ExecuteNonQuery(); 
                    Message.InnerHtml = "<b>Record Updated</b><br>" + updateCmd; 
                    MyDataGrid.EditItemIndex = -1; 
                } 
                catch (SqlException e) 
                { 
                    if (e.Number == 2627) 
                        Message.InnerHtml = "ERROR: A record already exists with the same primary key"; 
                    else 
                        Message.InnerHtml = "ERROR: Could not update record, please ensure the fields are correctly filled out"; 
                    Message.Style["color"] = "red"; 
                }             myCommand.Connection.Close();             BindGrid(); 
            } 
            else 
            { 
                Message.InnerHtml = "ERROR: Please check each field for error conditions."; 
                Message.Style["color"] = "red"; 
            } 
        } 
      

  2.   

    public void BindGrid() 
        { 
            SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);         DataSet ds = new DataSet(); 
            myCommand.Fill(ds, "Authors");         MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView; 
            MyDataGrid.DataBind(); 
        } </script> 
    </head> <body style="font: 10pt verdana">   <form runat="server">     <h3><font face="Verdana">Updating a Row of Data w/ Validation</font></h3>     <span id="Message" EnableViewState="false" style="font: arial 11pt;" runat="server"/><p>     <ASP:DataGrid id="MyDataGrid" runat="server" 
          Width="800" 
          BackColor="#ccccff" 
          BorderColor="black" 
          ShowFooter="false" 
          CellPadding=3 
          CellSpacing="0" 
          Font-Name="Verdana" 
          Font-Size="8pt" 
          HeaderStyle-BackColor="#aaaadd" 
          OnEditCommand="MyDataGrid_Edit" 
          OnCancelCommand="MyDataGrid_Cancel" 
          OnUpdateCommand="MyDataGrid_Update" 
          DataKeyField="au_id" 
          AutoGenerateColumns="false" 
        >       <Columns> 
            <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Update"  ItemStyle-Wrap="false"/> 
            <asp:BoundColumn HeaderText="au_id" SortExpression="au_id" ReadOnly="True" DataField="au_id" ItemStyle-Wrap="false"/> 
            <asp:TemplateColumn HeaderText="au_lname" SortExpression="au_lname"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "au_lname") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <nobr> 
                <asp:TextBox runat="server" id="edit_LName" Text='<%# DataBinder.Eval(Container.DataItem, "au_lname") %>'/> 
                <asp:RequiredFieldValidator id="au_lnameReqVal" 
                    ControlToValidate="edit_LName" 
                    Display="Dynamic" 
                    Font-Name="Verdana" Font-Size="12" 
                    runat=server> 
                         * 
                </asp:RequiredFieldValidator> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="au_fname" SortExpression="au_fname"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "au_fname") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <nobr> 
                <asp:TextBox runat="server" id="edit_FName" Text='<%# DataBinder.Eval(Container.DataItem, "au_fname") %>'/> 
                <asp:RequiredFieldValidator id="au_fnameReqVal" 
                    ControlToValidate="edit_FName" 
                    Display="Dynamic" 
                    Font-Name="Verdana" Font-Size="12" 
                    runat=server> 
                         * 
                </asp:RequiredFieldValidator> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="phone" SortExpression="phone"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "phone") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <nobr> 
                <asp:TextBox runat="server" id="edit_Phone" Text='<%# DataBinder.Eval(Container.DataItem, "phone") %>'/> 
                <asp:RequiredFieldValidator id="phoneReqVal" 
                    ControlToValidate="edit_Phone" 
                    Display="Dynamic" 
                    Font-Name="Verdana" Font-Size="12" 
                    runat=server> 
                         * 
                </asp:RequiredFieldValidator> 
                <asp:RegularExpressionValidator id="phoneRegexVal" 
                    ControlToValidate="edit_Phone" 
                    ValidationExpression="[0-9]{3} [0-9]{3}-[0-9]{4}" 
                    Display="Dynamic" 
                    Font-Name="Arial" Font-Size="11" 
                    runat=server> 
                        * Phone must be in form: XXX XXX-XXXX <br> 
                </asp:RegularExpressionValidator> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="address" SortExpression="address"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "address") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <asp:TextBox runat="server" id="edit_Address" Text='<%# DataBinder.Eval(Container.DataItem, "address") %>'/> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="city" SortExpression="city"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "city") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <asp:TextBox runat="server" id="edit_City" Text='<%# DataBinder.Eval(Container.DataItem, "city") %>'/> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="state" SortExpression="state"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "state") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <asp:DropDownList runat="server" DataSource='<%# StateIndex.DefaultView %>' DataTextField="Name" SelectedIndex='<%# GetStateIndex((String)((DataRowView)Container.DataItem)["state"]) %>' id="edit_State"/> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="zip" SortExpression="zip"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "zip") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <asp:TextBox runat="server" id="edit_Zip" Text='<%# DataBinder.Eval(Container.DataItem, "zip") %>'/> 
                <asp:RegularExpressionValidator id="RegularExpressionValidator1" 
                    ASPClass="RegularExpressionValidator" ControlToValidate="edit_Zip" 
                    ValidationExpression="[0-9]{5}" 
                    Display="Dynamic" 
                    Font-Name="Arial" Font-Size="11" 
                    runat=server> 
                        * Zip Code must be 5 numeric digits <br> 
                </asp:RegularExpressionValidator> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
            <asp:TemplateColumn HeaderText="contract" SortExpression="contract"> 
              <ItemTemplate> 
                <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "contract", "{0}") %>'/> 
              </ItemTemplate> 
              <EditItemTemplate> 
                <asp:CheckBox runat="server" id="edit_Contract" Checked='<%# DataBinder.Eval(Container.DataItem, "contract") %>'/> 
              </EditItemTemplate> 
            </asp:TemplateColumn> 
          </Columns>     </ASP:DataGrid> 
    <hr> 
    <ASP:DataGrid id="DataGrid2" runat="server" 
        Width="360" 
        BackColor="#ccccff"  
        BorderColor="black" 
        ShowFooter="false"  
        CellPadding=3  
        CellSpacing="0" 
        Font-Name="Verdana" 
        Font-Size="8pt" 
        HeaderStyle-BackColor="#aaaadd" 
        EnableViewState="false" 
      /> 
      </form> </body> 
    </html>
      

  3.   

    select distinct(FieldsName) from TableName二:
    在第一个下拉框的selectchanged事件中写一个判断,根据第一个下拉框的值来给第二个下拉框加载数据.
      

  4.   

    SELECT field1 FROM TABLE GROUP BY field1  //这样可以避免重复两个DropDownList,一个绑定部门,一个是该部门的员工,我把它放到两个表里面,你可以根据情况在一个表中也行,自己改一下吧。using System; 
    using System.Collections; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.Drawing; 
    using System.Web; 
    using System.Web.SessionState; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.HtmlControls; namespace TreeAndTab 

      public class WebForm4 : System.Web.UI.Page 
      { 
        protected DropDownList DropDownList1; 
        protected DropDownList DropDownList2; 
        protected DataSet ds=new DataSet(); 
        protected SqlDataAdapter sda; 
         
        private void Page_Load(object sender, System.EventArgs e) 
        { 
            if(!IsPostBack) 
            bind(DropDownList1,"表名","select bumen from 表名 group by bumen","bumen"); 
          bind(DropDownList2,"表名2","select * from 表名2 where bumen='" +DropDownList1.SelectedItem.Text +"'","name"); 
        }     private void bind(DropDownList list,string table,string selectsql,string field) 
        { 
            list.DataSource=creat_ds(table,selectsql); 
            list.DataTextField=field; 
            list.DataBind(); 
        }     private DataView creat_ds(string table,string selectsql) 
        { 
            ds=new DataSet(); 
            sda = new SqlDataAdapter(selectsql, "server=...."); 
            sda.Fill(ds,table); 
            return ds.Tables[table].DefaultView; 
        } 
       } 
    }
      

  5.   

    记得第一个DropDownList要设置AutoPostBack=true
      

  6.   

    1.用select distinct 字段名 
    2.在第一个的事件里绑定第2个
    在第2个的绑定的SQL语句中加上第一个的条件就行了where xxxid="& drop1.selecteditem.value