在ASP.NET GridView中上下移动行

时间:2017-07-07 16:50:19

标签: c# asp.net gridview

我正在尝试通过按向上按钮或向下按钮来学习在列表视图中上下移动行。

以下是我的ASP.NET。

<asp:GridView ID="gridChecks" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnRowCreated="GridChecks_RowCreated" OnRowCommand="gridChecks_RowCommand" Style="margin: 0 auto; width: 850px; margin-top: 10px" CssClass="tableGlobalGenericStyle tableGlobalOption_AlternatingRow">
                        <Columns>
                            <asp:BoundField DataField="RowNumber" HeaderText="Check ID" HeaderStyle-Width="80px" />
                            <asp:TemplateField HeaderText="Check Title" HeaderStyle-Width="250px">
                                <ItemTemplate>
                                    <asp:TextBox ID="txtCheckTitle" runat="server" Width="240px"></asp:TextBox>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Effective From">
                                <ItemTemplate>
                                    <asp:textbox ID="txtDateFrom" runat="server" Width="150px"></asp:textbox>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Effective To">
                                <ItemTemplate>
                                    <asp:textbox ID="txtDateTo" runat="server" Width="150px"></asp:textbox>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Actions" HeaderStyle-Width="200px">
                                <ItemTemplate>
                                    <asp:Button ID="btnMoveUp" runat="server" CommandName="Up" CssClass="imageButton imageButton_UpArrow imageButton_Image" ToolTip="Click to add move check up the list" />
                                    <asp:Button ID="btnMoveDown" runat="server" CommandName="Down" CssClass="imageButton imageButton_DownArrow imageButton_Image" ToolTip="Click to add move check down the list" />
                                    <asp:Button ID="btnRemoveCheck" runat="server" OnClick="BtnRemove_Click" CssClass="imageButton imageButton_Remove imageButton_Image" ToolTip="Click to add remove check from the list" />
                                </ItemTemplate>
                                <FooterStyle HorizontalAlign="Center" />
                                <FooterTemplate>
                                    <asp:Button ID="btnAddCheck" runat="server" OnClick="BtnAddCheck_Click" CssClass="imageButton imageButton_Add" Text="Add Check" ToolTip="Click to add new check to the list" />
                                </FooterTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>

我目前有一个删除按钮,可以从行中删除它并保留编号序列ID。

删除按钮C#

protected void BtnRemove_Click(object sender, EventArgs e)
{
    Button lb = (Button)sender;
    GridViewRow gvRow = (GridViewRow)lb.NamingContainer;
    int rowID = gvRow.RowIndex;
    if (ViewState["CurrentTable"] != null)
    {
        DataTable dt = (DataTable)ViewState["CurrentTable"];
        if (dt.Rows.Count > 1)
        {
            if (gvRow.RowIndex < dt.Rows.Count - 1)
            {
                //Remove the Selected Row data and reset row number
                dt.Rows.Remove(dt.Rows[rowID]);
                ResetRowID(dt);
            }
        }

        //Store the current data in ViewState for future reference
        ViewState["CurrentTable"] = dt;

        //Re bind the GridView for the updated data
        gridChecks.DataSource = dt;
        gridChecks.DataBind();
    }

    //Set Previous Data on Postbacks
    SetPreviousData();
}

我正在尝试做类似的事情,但在列表中向上或向下移动行,同时保留数字序列ID。

我理解它将涉及gridview的索引,并且我需要在完成后重新绑定它。

有人可以以正确的方向指导我。谢谢!!

2 个答案:

答案 0 :(得分:1)

根据您的示例,给定 index 是您要交换的两行中第一行的索引:

创建新行

var firstRow = dt[index];
var newRow = dt.NewRow();

使用第一行中的数据填充newRow

for (int i=0; i<dt.Colums.Count(); i++)
  newRow[i]=firstRow[i]

删除firstRow

dt.RemoveAt[index];

现在第二行有rowIndex = index,所以我们在它之后添加新行

dt.InsertAt[newRow, index + 1];

通过这种方式,我们将第二排拉出1位

答案 1 :(得分:0)

    for (int i = 0; i < lstup.Items.Count; i++)
        {
            if (lstup.Items[i].Selected)
            {

                if (i > 0 && !lstup.Items[i - 1].Selected)
                {
                    ListItem bottom = lstup.Items[i];

                    lstup.Items.Remove(bottom);
                    lstup.Items.Insert(i - 1, bottom);

                }
            }
        }