Pergunta

Eu não entendo por que esse código não funciona.

foreach (DataRow dataRow in dataTable.Rows)
{
    if (true)
    {
        dataRow.Delete();
    }
}
Foi útil?

Solução

Apesar de DataRow.Delete não modifica o estado da coleção, A documentação da Microsoft indica que você não deve chamá-lo embora iterar sobre a coleção:

Nem Apagar, nem Remova deve ser chamado em um loop foreach enquanto iterar por meio de um objeto DataRowCollection.Excluir nem Remover modificar o estado da coleção.

A melhor solução é, geralmente, para criar uma coleção separada (por exemplo,um List<DataRow>) de itens que você deseja remover e, em seguida, removê-los depois de terminar a iteração.

Esta é também a solução para situações em que você deseja remover itens de uma coleção, como a maioria das coleções .NET não permite que você altere o conteúdo da coleção, enquanto você está iterando sobre ele.

Outras dicas

Maneira mais segura de usar for loop

for (int i = datatable.Rows.Count - 1; i >= 0; i--) 
{
    if (true)
    {
        datatable.Rows[i].Delete();
    }
}

Não se esqueça de AcceptChanges para remover todas as linhas marcadas:

datatable.AcceptChanges();

Você não pode modificar uma coleção enquanto está iterar, usando um foreach declaração.

Você pode tentar algo assim:

List<DataRow> deletedRows = new List<DataRow>();

foreach (DataRow dataRow in dataTable.Rows)
{
    if(true) deletedRows.Add(dataRow);
}

foreach(DataRow dataRow in deletedRows)
{
    dataRow.Delete();
}

Se você ligar para o método de exclusão, só precisará ligar AcceptChanges() Na mesa, você está modificando, após o loop foreach.

foreach (DataRow dataRow in dataTable.Rows)
{
    if (true)
    {
        dataRow.Delete();
    }
}

dataTable.AcceptChanges();

O método de exclusão simplesmente marca a linha para exclusão.

http://msdn.microsoft.com/en-us/library/system.data.datarow.delete%28v=vs.90%29.aspx

Você definiu seu arquivo hbm.xml para ser recurso incorporado?

foreach (DataRow dataRow in dataTable.Rows)
{
    if (true)
    {
        dataRow.Delete();
    }
}

dataTable.AcceptChanges();

Por favor, consulte os snaps para que o trabalho dele.

  1. Apenas excluído, mas não removido do DataTable.

enter image description here

  1. Ponto de quebra antes da função aceitchanges ().enter image description here
  2. Após a função de aceitação de aceitação ().enter image description here

Espero que este problema tenha resolvido agora.

Sim, libpng funciona em arquiteturas de 64 bits, incluindo x86_64.

É uma biblioteca de código aberto para que você possa compilá-lo com seu projeto se um binário pré-compilado não estiver disponível para sua plataforma / arquitetura.

A maneira mais fácil de conseguir isso usando uma lista para mapear linhas que você deseja excluir e excluir linhas fora da iteração DataTable.

C#

    List<DataRow> rowsWantToDelete= new List<DataRow>();

    foreach (DataRow dr in dt.Rows)
    {
        if(/*Your condition*/)
        {
            rowsWantToDelete.Add(dr);
        }
    }

    foreach(DataRow dr in rowsWantToDelete)
    {
        dt.Rows.Remove(dr);
    }

Vb

Dim rowsWantToDelete As New List(Of DataRow)

For Each dr As DataRow In dt
    If 'Your condition' Then
        rowsWantToDelete .Add(dr)
    End If
Next

For Each dr As DataRow In rowsWantToDelete 
    dt.Rows.Remove(dr)
Next

Há uma outra versão do mesmo ("eu acho que o mais fácil) o que eu usei:

int i=0;
while (i < myDataTable.Rows.Count)
{
    if (condition)  //should it be deleted?
        myDataTable.Rows.RemoveAt(i);
    else
        i++;
}

Isto é mais rápido.

Somente para pessoas que procuram cenário específico como eu, eu precisava diminuir o tempo gasto e, uma vez que alguma informação útil é extraída de cada linha, excluí a linha marcando como excluído.

Espero que isso ajude alguém ...

foreach (DataRow dataRow in dataTable.Rows)
{
    if (dataRow.RowState != DataRowState.Deleted)
    {
        if (your condition here)
        {
            dataRow.Delete();
        }
    }
}

Isso se aplica a praticamente qualquer coleção. Se você tentar excluir um item enquanto estiver na coleção, terá um problema. Por exemplo, se você excluir a linha nº 3, a linha anterior nº 4 se tornará a linha 3.

Configurações do site goto, em look e sinta-se selecione Rendições de imagem.

Aqui você pode mexer ao redor para escolher o que você deseja mostrar com uma imagem quando o SharePoint processa a imagem do perfil.

é encontrado aqui:

Render clique aqui

Selecione a imagem (miniatura) pairando e clique em Editar Renditions

edit image

Estes são os tamanhos para mudar para o seu gosto:

Tipos de tamanho da imagem

Clique no tamanho selecionado para editar (escala está disponível)

Alterar imagem Prop

Agora selecione sua renderização que você deseja como padrão

Selecione o tipo padrão

Infelizmente, uma vez que a renderização começou, não pode ser salvo. O que eu quero dizer é quando você carregar uma imagem para sharpeoint, ele economiza três escalas e aquelas que são salvas e usadas ... A imagem original não é salva. Então, se salvou as imagens cortadas do que ela usará as imagens recortadas. Você precisaria reuplicar a imagem de outra forma!

Detalhes completos podem ser encontrados aqui:

http://blog.mastykarz.nl/image-renditions-sharepoint-2013 /

Use isto:

for (int i = 0; i < myDataTable.Rows.Count; i++)

{

 myDataTable[i].Delete();

}

Isso ocorre porque parece tentar desmontar a escada da escada em que você escala. Simplesmente, você não pode remover um item que você itera.

Portanto, você deve usar uma matriz diferente para iterar e removê -los de Datatable Rows propriedade.

foreach (DataRow dataRow in dataTable.Select())
{
    if (true)
    {
        dataTable.Rows.Remove(dataRow);
    }
}

A Certeza De Magents

Esta é a forma como eu fiz isso e funciona bem

dt = GetStationeryConsolidationDetails(txtRefNo.Text);
int intRows = dt.Rows.Count;
int x = 0;
for (int c = 0; c < intRows; c++)
{
  if (dt.Rows[c - x]["DQTY"].ToString() == "0")
  {
    dt.Rows[c - x].Delete();
    dt.AcceptChanges();
    x++;        
  }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top