2013-02-14 6 views
2

У меня есть элемент управления Gridview с двумя столбцами: один ID (метка), а другой - порядок сортировки (раскрывающийся список). Выпадающий номер пронумерован от 1 до n, где n - это количество строк в Gridview.Сортировка по расписанию в Gridview

Например:

ID  Sort Order 
001   1 
002   2 
003   3 
004   4 

После того как я изменить значение в списке для одной из строк - например, я изменю выпадающий список сортировки по ID 002 от 2 до 3 - GridView должны быть обновлены, как это:

ID  Sort Order 
001   1 
003   2 
002   3 
004   4 

мне нужна логика для достижения этой цели в рамках SelectedIndexChanged события для выпадающего списка, а также код для выполнения обновления в базе данных.

+0

порядок сортировки все еще остается 1 2 3 4 ?? – Sakthivel

+0

@codebrain, вы заметите, что 'ID' 002 больше не получил« Порядок сортировки »из 2 сейчас 3 – glh

+0

Можете ли вы дать нам дополнительную информацию? Как данные привязаны к GridView и как выглядит модель? –

ответ

0

Если я правильно понял, то ваша задача найти решение вашей проблемы, как показано ниже:

кодекса За

public partial class _Default : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      BindGrid(); 
     } 
    } 

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      DropDownList objDropDownList = e.Row.FindControl("DropDownList1") as DropDownList; 
      objDropDownList.DataSource = CustomSorting.GetAll(); 
      objDropDownList.DataTextField = "SOText"; 
      objDropDownList.DataValueField = "SOID"; 
      objDropDownList.DataBind(); 

      HiddenField objHiddenField = e.Row.FindControl("HiddenField1") as HiddenField; 
      string currSortOrder = (!string.IsNullOrEmpty(objHiddenField.Value) ? objHiddenField.Value : 
    "0"); 
      objDropDownList.SelectedIndex = objDropDownList.Items.IndexOf(objDropDownList.Items.FindByValue(currSortOrder)); 
     } 
    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     DropDownList objDropDownList = sender as DropDownList; 
     string test = objDropDownList.SelectedValue; 

     GridViewRow currRow = objDropDownList.NamingContainer as GridViewRow; 
     Label objLabel = currRow.FindControl("Label1") as Label; 
     HiddenField objHiddenField = currRow.FindControl("HiddenField1") as HiddenField; 

     List<TestClass> lstTestClass = PageData; 
     if (lstTestClass.Exists(x => x.SortOrder == Convert.ToInt32(test))) 
      lstTestClass.Find(x => x.SortOrder == Convert.ToInt32(test)).SortOrder = 
    Convert.ToInt32(objHiddenField.Value); 
     if (lstTestClass.Exists(x => x.ID == objLabel.Text)) 
      lstTestClass.Find(x => x.ID == objLabel.Text).SortOrder = Convert.ToInt32(test); 
     PageData = lstTestClass; 
     BindGrid(); 
    } 

    protected List<TestClass> PageData 
    { 
     get 
     { 
      return (Session["_PageData"] == null) ? TestClass.GetAll() : Session["_PageData"] as List<TestClass>; 
     } 
     set 
     { 
      Session["_PageData"] = value; 
     } 
    } 
    protected void BindGrid() 
    { 
     GridView1.DataSource = PageData.OrderBy(x=>x.SortOrder); 
     GridView1.DataBind(); 
    } 
} 

public class CustomSorting 
{ 
    public int SOID { get; set; } 
    public string SOText { get; set; } 

    public static List<CustomSorting> GetAll() 
    { 
     return new List<CustomSorting>(){ 
      new CustomSorting(){SOID=1,SOText="1"}, 
      new CustomSorting(){SOID=2,SOText="2"}, 
      new CustomSorting(){SOID=3,SOText="3"}, 
      new CustomSorting(){SOID=4,SOText="4"}, 
     }; 
    } 
} 

public class TestClass 
{ 
    public string ID { get; set; } 
    public int SortOrder { get; set; } 

    public static List<TestClass> GetAll() 
    { 
     return new List<TestClass>(){ 
      new TestClass(){ID="001",SortOrder=1}, 
      new TestClass(){ID="002",SortOrder=2}, 
      new TestClass(){ID="003",SortOrder=3}, 
      new TestClass(){ID="004",SortOrder=4} 
     }.OrderBy(x=>x.SortOrder).ToList(); 
    } 
} 

ASPX изменения:

<asp:GridView ID="GridView1" runat="server" 
OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="ID"> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Eval("ID")%>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Sort Order"> 
      <ItemTemplate> 
       <asp:HiddenField ID="HiddenField1" runat="server"  Value='<%#Eval("SortOrder") %>' /> 
       <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
Смежные вопросы