C # Вопрос об удалении сетки данных - PullRequest
1 голос
/ 09 июня 2011

Я связал сетку данных с массивом.Также есть кнопка для удаления строки.Проблема в том, что я не уверен, как это реализовать, поскольку источником данных является массив.

См. Ниже

  <Columns>    
     <asp:TemplateColumn>        
            <ItemTemplate>          
       <asp:Label ID="lblItems" runat="server" Text='<%# Container.DataItem>' />         
       </ItemTemplate>    
     </asp:TemplateColumn>     
        <asp:ButtonColumn ButtonType="PushButton" CommandName="Delete" Text="Delete">
          </asp:ButtonColumn>
                 </Columns> 

и здесь я хотел бы реализовать это ..

   private void DataGrid1_DeleteCommand(object source,
                  System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        int rowToDelete = e.Item.ItemIndex;

        myDataGrid.DataBind();
    }

В коде для удаления, как я могу получить доступ к индексумой массив основан на нажатой кнопке (на строку)?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Вот пример

Разметка.

<asp:DataGrid ID="DataGrid1" runat="server"
        AutoGenerateColumns="False" 
        OnDeleteCommand="DataGrid1_DeleteCommand">
    <Columns>
        <asp:TemplateColumn HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblItems" runat="server" 
                    Text='<%# Container.DataItem %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:ButtonColumn ButtonType="PushButton" 
                CommandName="Delete" 
                HeaderText="Actions" 
                Text="Delete">
        </asp:ButtonColumn>
    </Columns>
</asp:DataGrid>

Кодовый код.

private static string[] names = new string[] { "Matt", "Joanne", "Robert" };
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        BindGrid();
    }
}
private void BindGrid()
{
    DataGrid1.DataSource = names;
    DataGrid1.DataBind();
}
protected void DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)
{
    string deletedItem = ((Label) DataGrid1.Items[e.Item.ItemIndex].FindControl("lblItems")).Text;
    names = names.Where(val => val != deletedItem).ToArray();
    BindGrid();
}

Надеюсь, это поможет.

0 голосов
/ 09 июня 2011

Вы пытались получить доступ к своему объекту src, используя метод, описанный ниже (обратите внимание, что это событие 'RowDeleting' в gridview)?

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        MyObject o = (MyObject)gv.Rows[e.RowIndex].DataItem;
    }

Есть и другие приемы, такие как сохранение идентификатора в скрытом поле в строке, а затем в команде удаления вы ищете элемент управления и собираете свое значение. Я предпочитаю метод выше, но на самом деле зависит от вашей цели.

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        HiddenField field = (HiddenField)gv.Rows[e.RowIndex].FindControl("myHiddenField");
        string myValue = field.Value;

        // delete it and rebind
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...