Как бы я искал в DataSet и изменил данные в нем, прежде чем он станет связанным? - PullRequest
1 голос
/ 24 февраля 2009
Try
    Dim ds As DataSet = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings("connstr").ConnectionString, CommandType.StoredProcedure, "Get_All", New SqlParameter("@userid", Session("userid")))


    rptBundles.DataSource = ds.Tables(0)

Catch ex As Exception
    showerror(ex, Me)
End Try

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

    For Each ds_table As DataTable In ds.Tables
        For Each ds_row As DataRow In ds_table.Rows
            If ds_row("isScorm") = 1 Then
                ds_row("totalLessons") = 100
                ds_row("TotalQuestions") = 100
                ds_row("lessonscompleted") = 50
                ds_row("TotalCorrect") = 50
            End If
        Next
    Next

Только когда я удаляю этот код, репитер заполняется, как и ожидалось, но я не получил ошибок!

Ответы [ 2 ]

1 голос
/ 25 февраля 2009

Устраняет ли проблему добавление rptBundles.DataBind () после настройки источника данных?

Кроме того, вы можете использовать метод DataTable.Select , чтобы выбрать (и затем изменить) строки, в которых isScorm = 1.

1 голос
/ 24 февраля 2009

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

Если это был ваш основной HTML

<html>
  <asp:Repeater id="repeater" runat="server" OnItemDataBound="repeater_ItemDatabound">
     <ItemTemplate>
         <span><%# DataBinder.Eval(Container.DataItem, "isScorm") %></span>
         <span id="totalLessonsSpan" runat="server"><%# DataBinder.Eval(Container.DataItem, "totalLessons") %></span>
     </ItemTemplate>
  </asp:Repeater>
</html>

Я хотел бы иметь это в коде

protected void repeater_ItemDatabound(object sender, RepeaterItemEventArgs e)
{
    DataRow row = e.Item.DataItem as DataRow;

    if (row == null) { }
    else
    {
        int isScorm = 0;
        int.TryParse(Convert.ToString(row["isScorm"]), out isScorm);
        if (isScorm > 0)
        {
            HtmlGenericControl totalLessonsSpan = e.Item.FindControl("totalLessonsSpan") as HtmlGenericControl;
            totalLessonsSpan.Text = "100";
        }
    }
}

Вы, вероятно, не хотите перебирать данные и менять их там, а затем связываться, когда вы можете сделать это во время связывания.

С другой стороны, я ненавижу эту БД из-за моей потребности в целостности данных - это изменить ее в SQL-запросе с помощью операторов case.

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