É possível, mas o ideal seria fazer inverso, onde o componente visual ListView não vai se a fonte de dados.
Exemplo Form1:
public partial class Form1 : Form
{
private IList<int> FonteDados { get; set; }
private int[] VetorOrdenado { get { return FonteDados.OrderBy(f => f).ToArray(); } }
public Form1()
{
FonteDados = new List<int>();
InitializeComponent();
}
private void btnAdicionar_Click(object sender, EventArgs e)
{
AdicionarDados();
AtualizarListView();
}
private void AdicionarDados()
{
var numAleatorio = new Random();
int numGerado;
for (var i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
numGerado = numAleatorio.Next(1, 9999);
FonteDados.Add(numGerado);
}
}
private void AtualizarListView()
{
listViewCriarArray.Clear();
foreach (var item in VetorOrdenado)
{
listViewCriarArray.Items.Add(item.ToString());
}
}
private void btnChamarForm2_Click(object sender, EventArgs e)
{
ChamarForm2();
}
private void ChamarForm2()
{
var form2 = new Form2();
form2.Itens = VetorOrdenado;
form2.ShowDialog();
}
}
Form2:
public partial class Form2 : Form
{
public int[] Itens
{
set
{
listViewForm2.Clear();
foreach (var numero in value)
{
listViewForm2.Items.Add(numero.ToString());
}
}
}
public Form2()
{
InitializeComponent();
}
}
@javaflex Muito obrigado pela atenção e pelo tempo pra me orientar,tem ajudado muito,to aprendendo a manipular novos metodos e classes por causa desses códigos.
Eu percebi que vc jogou os numeros aleatótorios na fonte de dados que é uma lista.
Eu consigo usar ela pra aplicar meus metódos de ordenação?
o jeito que vc fez ta muito top,porém eu preciso apenas pegar a lista de numeros gerados que vc usou
e aproveitar elas pra implementar meus códigos…
por exemplo
eu preciso comparar o desempenho entre 3 metodos de ordenação
bubble sorte
insert sort
select sort
ai eu crio um metodo pra reaproveitar a lista de numeros aleatorios que vc gerou como parametro
e por fim ordenar
por exemplo
public void BubbleSort (int [] vetor) // sua ArrayListAqui{
for (int i = 0; i < vetor.Length; i++)
{
for (int j = 0; j < vetor.Length; j++)
{
if (vetor[i] > vetor[j])
{
aux = vetor[i];
vetor[i] = vetor[j];
vetor[j] = aux;
}
}
}
// ai Eu me viro pra criar os metodos e reaproveito a sua lista, se puder dar um exemplo com bubbleSort em WindowsForms ajudaria muito.
Eu por si só tenho que criar os métodos,então n posso usar nenhum pronto
to gostando muito de Windows form,se tiver algum livro que vc recomenda,me avise pf.
Se o usuário necessita visualizar a lista ordenada, no cenário que você passou nao precisa de complicações, o código que te passei no exemplo acima já faz isso de forma bem simples:
FonteDados.OrderBy(f => f)
Sobre outros métodos de ordenação não sei te ajudar.
O usuario escolhe o tamanho do array, no caso na foto o usuario escolheu 1
logo ao lado de BubbleSort tem uma view
logo ao lado de insertSort tem uma view
ambas atualizam quando eu crio o array,
porém elas estão atualizando duas vezes
nesse caso eu digitei tamanho do array 1 e gerou dois numeros,era pra gerar só 1
você pode me ajudar aonde eu to errando?
{
public partial class Janela : Form
{
private bool Salvo = false; // Controla se o arquivo já foi salvo ou não
private IList FonteDados { get; set; } // VetorGlobal
private IList FonteDadosOrdenados { get; set; } // VetorGlobal
int aux; //auxiliar para ajudar nas trocas de posicões dos vetores
Stopwatch BubbleWatch = new Stopwatch(); // Calcula o tempo de execução dos metodos
Stopwatch TInsertWatch= new Stopwatch();
public Janela()
{
FonteDados = new List<int>(); // Lista Global de Numeros Aleatorios
FonteDadosOrdenados = new List<int>(); // Lista Global De Numeros Ordenados
InitializeComponent(); // inicia Windows Forms
}
private void btnCriarArray_Click(object sender, EventArgs e)
{
AdicionarDadosNoArray();
AtualizarListView();
BubbleWatch.Start(); //Contagem Inicia do Bubble
bubbleSort();
BubbleWatch.Stop(); //Contagem termina do Bubble
InsertSort();
AtualizarListViewOrdenada();
}
private void AdicionarDadosNoArray() { //Metodo responsavel por gerar numeros aleatorios e guardar na lista global para ser reutilizada.
Random numAleatorio = new Random();
int numGerado;
for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
numGerado = numAleatorio.Next(-100, 100); // gera numeros aleatorios de 0 a 1000
FonteDados.Add(numGerado); //lista global recebe cada elemento na posicao [i]
}
}
private void AtualizarListView()
{ // metodo para atualizar os itens adicionados na lista global em uma lista view
listViewArray.Clear();
foreach (var item in FonteDados)
{
listViewArray.Items.Add(item.ToString()); //Exibi os numeros gerados na list view ao lado do botao criar Array
}
}
private void AtualizarListViewOrdenada()
{ // metodo para atualizar os itens ordenados adicionados na lista global em uma listview
listViewBubble.Clear();
listViewInsert.Clear();
foreach (var item in FonteDadosOrdenados)
{
listViewBubble.Items.Add(item.ToString());
listViewInsert.Items.Add(item.ToString());
}
}
public void bubbleSort() { // metodo Bubble sort
for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
for (int j = i; j < int.Parse(textBoxTamanhoArray.Text); j++)
{
if (FonteDados[i] > FonteDados[j])
{
aux = FonteDados[i];
FonteDados[i] = FonteDados[j];
FonteDados[j] = aux;
}
}
}
for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
FonteDadosOrdenados.Add(FonteDados[i]);
}
textBoxTimeBubble.Text = BubbleWatch.Elapsed.ToString(); //Exibi o tempo de execução
}
public void InsertSort() {
int j;
for (int i = 1; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
aux = FonteDados[i];
j = i - 1;
while ((j >= 0) && (aux < FonteDados[j]))
{
FonteDados[j + 1] = FonteDados[j];
j--;
}
FonteDados[j + 1] = aux;
}
for (int i = 0; i < int.Parse(textBoxTamanhoArray.Text); i++)
{
FonteDadosOrdenados.Add(FonteDados[i]);
}
}
Se só está aprendendo e isso nao tem utilização real para produção, não esquenta. Quando voce for trabalhar, 99% das vezes vai usar order by via SQL ou esse OrderBy do LINQ que tinha te passado, simples assim.