Вернуть 2 случайных изображения из массива - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь вернуть 2 уникальных изображения из массива.Прямо сейчас я обновляю страницу, пока не получу 2 уникальных изображения.Это не идеально.Как я могу изменить этот код так, чтобы он поддерживал 2 уникальных изображения, не обновляя страницу до тех пор, пока она не обновится.

Могу ли я сделать это на этом слое или мне нужно проверить уникальные числа на уровне данных?

 Picture dlPicture = new Picture();
        DataTable DTPictures = dlPicture.GetRandomPicture();
        Picture dlPicture2 = new Picture();
        DataTable DTPictures2 = dlPicture2.GetRandomPicture();



        // the variables to hold the yes and no Id's for each set
        string firstNoPicId = "";
        string firstYesPicId = "";
        string secondNoPicId = "";
        string secondYesPicId = "";

        foreach (DataRow row in DTPictures.Rows)
        {
            firstYesPicId = row["PicID"].ToString();
            secondNoPicId = firstYesPicId;
            FirstPicMemberNameLabel.Text = row["MemberName"].ToString();
            FirstPicLink.ImageUrl = "Pictures/" + row["PicLoc"];

        }

        foreach (DataRow row in DTPictures2.Rows)
        {
            secondYesPicId = row["PicID"].ToString();
            firstNoPicId = secondYesPicId;
            SecondPicMemberNameLabel.Text = row["MemberName"].ToString();
            SecondPicLink.ImageUrl = "Pictures/" + row["PicLoc"];

        }
        if (firstYesPicId != secondYesPicId)
        {

            FirstPicLink.PostBackUrl = "default.aspx?yesId=" + firstYesPicId + "&noId=" + firstNoPicId;
            SecondPicLink.PostBackUrl = "default.aspx?yesId=" + secondYesPicId + "&noId=" + secondNoPicId;
        }
        else
        {
            Response.Redirect("Default.aspx");
        }

Ответы [ 3 ]

4 голосов
/ 15 декабря 2011

Есть два довольно очевидных способа справиться с этим

  1. Добавить перегрузку dlPicture.GetRandomPicture(int picID) Принимает идентификатор, чтобы не возвращать уже использованный picID

  2. реструктурируйте ваш код так, чтобы он работал до secondYesPicId != firstYesPicId

Что-то вроде

 secondYesPicId = firstYesPicId;
 while (firstYesPicId == secondYesPicId)
 {  DataTable DTPictures2 = dlPicture2.GetRandomPicture();

     foreach (DataRow row in DTPictures2.Rows)
    {
        secondYesPicId = row["PicID"].ToString();
        SecondPicMemberNameLabel.Text = row["MemberName"].ToString();
        SecondPicLink.ImageUrl = "Pictures/" + row["PicLoc"];

    }
 }
2 голосов
/ 15 декабря 2011

Возможно, лучшим решением было бы добавить код в ваш слой данных. GetRandomPicture, чтобы убедиться, что он не может возвращать одно и то же изображение дважды подряд?

в этом классе Picture добавьте переменную LastRandomPictureID и сделайте 'WHERE NOT ID = LastRandomPictureID 'в вашем запросе (возможно, вы захотите сделать его более надежным для обработки случая, когда существует только 1 изображение).

0 голосов
/ 15 декабря 2011
var rnd = new Random();
int randomPicIndex1 = rnd.Next(numOfPictures);
int randomPicIndex2;
do {
    randomPicIndex2 = rnd.Next(numOfPictures);
} while (randomPicIndex1 == randomPicIndex2);

Затем используйте эти индексы для получения случайных строк из вашей таблицы.

DataRow row1 = DTPictures.Rows[randomPicIndex1];
DataRow row2 = DTPictures.Rows[randomPicIndex2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...