Re: ReportViewer - выражения
От: Peter Fleischer Германия www.informtoools.de
Дата: 22.09.07 07:26
Оценка:
Здравствуйте, busik, Вы писали:

B>Как построить выражения в таблице отчета так, чтобы в ячейках таблицы выводились значения из разных таблиц.

B>например:
B>есть таблица с полями
B>материал;код
B>и вторая таблица
B>код;описание

B>а в отчете надо вывести

B>материал описание

B>причем описание чтоб соответствовало материалу по связующему полю "код"


B>в первой ячейке будет

B>Fields!Code.Value

B>а вот как следует написать выражение во второй ячейке?


B>Зарание спасибо!


Пример:

Imports System.Data
Imports System.Data.Sqlclient

Imports Microsoft.Reporting.WinForms

Public Class Form1

  Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
    '
    Testdata.GenerateData2()
    Testdata.LoadDataSet2()
    '
    Dim RDS2 As New Microsoft.Reporting.WinForms.ReportDataSource
    With RDS2
      .Name = "RDS2"
      .Value = Testdata.GetBindindSource2
    End With
    Dim rv As New ReportViewer
    Me.Controls.Add(rv)
    With rv
      .Dock = DockStyle.Fill
      .ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.PageWidth
      With .LocalReport
        '.DataSources.Add(RDS1)
        .DataSources.Add(RDS2)
        .ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
      End With
      .RefreshReport()
    End With
  End Sub

End Class

' Class for test data

Public Class Testdata

  Private Shared _cnString As String = "Data Source=localhost\sqlexpress;" & _
    "Initial Catalog=Test;Integrated Security=True"

  Public Shared Property ConnectionString() As String
    Get
      Return _cnString
    End Get
    Set(ByVal Value As String)
      _cnString = Value
    End Set
  End Property

  Shared cn As SqlConnection

  Shared Sub GenerateData2()
    Dim i As Integer
    Try
      Using cn As New SqlConnection(_cnString)
        cn.Open()
        Dim cmd As New SqlCommand("", cn)
        With cmd
          Try
            .CommandText = "DROP TABLE xTab1"
            .ExecuteNonQuery()
          Catch ex As Exception
          End Try
          .CommandText = "CREATE TABLE xTab1(ID int IDENTITY(1,1)" & _
            " PRIMARY KEY, col1 nvarchar(50))"
          .ExecuteNonQuery()
          .CommandText = "INSERT INTO xTab1(col1) VALUES(@p1)"
          With .Parameters
            .Add(New SqlParameter("@p1", GetType(String)))
          End With
          For i = 1 To 10
            .Parameters(0).Value = "master col " & i.ToString
            .ExecuteNonQuery()
          Next
          Try
            .CommandText = "DROP TABLE xTab2"
            .ExecuteNonQuery()
          Catch ex As Exception
          End Try
          .CommandText = "CREATE TABLE xTab2(ID int IDENTITY(1,1)" & _
            " PRIMARY KEY, FK int, col2 nvarchar(50))"
          .ExecuteNonQuery()
          .Parameters.Clear()
          .CommandText = "INSERT INTO xTab2(FK, col2) VALUES(@p1, @p2)"
          With .Parameters
            .Add(New SqlParameter("@p1", GetType(Integer)))
            .Add(New SqlParameter("@p2", GetType(String)))
          End With
          For i = 1 To 100
            .Parameters(0).Value = CInt(0.5 + 10 * Rnd())
            .Parameters(1).Value = "col " & i.ToString
            .ExecuteNonQuery()
          Next
        End With
      End Using
    Catch ex As Exception
      Debug.WriteLine(ex.ToString)
    End Try
  End Sub

  Shared da1 As SqlDataAdapter
  Shared ds As New DataSet
  Shared da2 As SqlDataAdapter

  Shared Sub LoadDataSet2()
    cn = New SqlConnection(_cnString)
    ds.Clear()
    ds.Relations.Clear()
    Dim cmd1 As New SqlCommand("SELECT * FROM xTab1", cn)
    da1 = New SqlDataAdapter(cmd1)
    da1.Fill(ds, "Tab1")
    With ds.Tables("Tab1").Columns("ID")
      .AutoIncrement = True
      .AutoIncrementSeed = -1
      .AutoIncrementStep = -1
    End With
    Dim cmd2 As New SqlCommand("SELECT * FROM xTab2", cn)
    da2 = New SqlDataAdapter(cmd2)
    da2.Fill(ds, "Tab2")
    With ds.Tables("Tab2").Columns("ID")
      .AutoIncrement = True
      .AutoIncrementSeed = -1
      .AutoIncrementStep = -1
    End With
    ds.Relations.Add(New DataRelation("rel", _
      ds.Tables(0).Columns("ID"), ds.Tables(1).Columns("FK")))
    ds.Tables("Tab2").Columns.Add("col1master", GetType(String), _
      "parent(rel).col1")
    With bs1
      .DataSource = ds
      .DataMember = "Tab1"
    End With
    With bs2
      .DataSource = ds
      .DataMember = "Tab2"
    End With
  End Sub

  Shared bs1 As New BindingSource
  Shared bs2 As New BindingSource

  Shared Function GetBindindSource1() As BindingSource
    Return bs1
  End Function

  Shared Function GetBindindSource2() As BindingSource
    Return bs2
  End Function

End Class


Подходящий репорт:

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
  <DataSources>
    <DataSource Name="DummyDataSource">
      <ConnectionProperties>
        <ConnectString>Data Source=fl-laptop2\sqlexpress;Initial Catalog=Test;Integrated Security=True</ConnectString>
        <DataProvider>SQL</DataProvider>
      </ConnectionProperties>
      <rd:DataSourceID>2708b7e4-f797-4f87-ab1e-ccbf65313921</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <BottomMargin>2.5cm</BottomMargin>
  <RightMargin>2.5cm</RightMargin>
  <PageWidth>21cm</PageWidth>
  <rd:DrawGrid>true</rd:DrawGrid>
  <InteractiveWidth>21cm</InteractiveWidth>
  <rd:GridSpacing>0.25cm</rd:GridSpacing>
  <rd:SnapToGrid>true</rd:SnapToGrid>
  <Body>
    <ColumnSpacing>1cm</ColumnSpacing>
    <ReportItems>
      <Table Name="table1">
        <Footer>
          <TableRows>
            <TableRow>
              <TableCells>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox7">
                      <rd:DefaultName>textbox7</rd:DefaultName>
                      <ZIndex>7</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox12">
                      <rd:DefaultName>textbox12</rd:DefaultName>
                      <ZIndex>6</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox8">
                      <rd:DefaultName>textbox8</rd:DefaultName>
                      <ZIndex>5</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox9">
                      <rd:DefaultName>textbox9</rd:DefaultName>
                      <ZIndex>4</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
              </TableCells>
              <Height>0.63492cm</Height>
            </TableRow>
          </TableRows>
        </Footer>
        <Details>
          <TableRows>
            <TableRow>
              <TableCells>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox4">
                      <rd:DefaultName>textbox4</rd:DefaultName>
                      <ZIndex>3</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value>=Fields!ID.Value</Value>
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox11">
                      <rd:DefaultName>textbox11</rd:DefaultName>
                      <ZIndex>2</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value>=Fields!FK.Value</Value>
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox5">
                      <rd:DefaultName>textbox5</rd:DefaultName>
                      <ZIndex>1</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value>=Fields!col2.Value</Value>
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox6">
                      <rd:DefaultName>textbox6</rd:DefaultName>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value>=Fields!col1master.Value</Value>
                    </Textbox>
                  </ReportItems>
                </TableCell>
              </TableCells>
              <Height>0.63492cm</Height>
            </TableRow>
          </TableRows>
        </Details>
        <Header>
          <TableRows>
            <TableRow>
              <TableCells>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox1">
                      <rd:DefaultName>textbox1</rd:DefaultName>
                      <ZIndex>11</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox10">
                      <rd:DefaultName>textbox10</rd:DefaultName>
                      <ZIndex>10</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox2">
                      <rd:DefaultName>textbox2</rd:DefaultName>
                      <ZIndex>9</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
                <TableCell>
                  <ReportItems>
                    <Textbox Name="textbox3">
                      <rd:DefaultName>textbox3</rd:DefaultName>
                      <ZIndex>8</ZIndex>
                      <Style>
                        <PaddingLeft>2pt</PaddingLeft>
                        <PaddingBottom>2pt</PaddingBottom>
                        <PaddingRight>2pt</PaddingRight>
                        <PaddingTop>2pt</PaddingTop>
                      </Style>
                      <CanGrow>true</CanGrow>
                      <Value />
                    </Textbox>
                  </ReportItems>
                </TableCell>
              </TableCells>
              <Height>0.63492cm</Height>
            </TableRow>
          </TableRows>
        </Header>
        <TableColumns>
          <TableColumn>
            <Width>3.5cm</Width>
          </TableColumn>
          <TableColumn>
            <Width>3.5cm</Width>
          </TableColumn>
          <TableColumn>
            <Width>3.75cm</Width>
          </TableColumn>
          <TableColumn>
            <Width>5.33333cm</Width>
          </TableColumn>
        </TableColumns>
        <Height>1.90476cm</Height>
      </Table>
    </ReportItems>
    <Height>2cm</Height>
  </Body>
  <rd:ReportID>fe2dd1eb-4aff-4e29-b01c-a489f94ed0f5</rd:ReportID>
  <LeftMargin>2.5cm</LeftMargin>
  <DataSets>
    <DataSet Name="RDS2">
      <rd:DataSetInfo>
        <rd:DataSetName>DataSet1</rd:DataSetName>
        <rd:TableName>Tab2</rd:TableName>
      </rd:DataSetInfo>
      <Query>
        <rd:UseGenericDesigner>true</rd:UseGenericDesigner>
        <CommandText />
        <DataSourceName>DummyDataSource</DataSourceName>
      </Query>
      <Fields>
        <Field Name="ID">
          <rd:TypeName>System.Int32</rd:TypeName>
          <DataField>ID</DataField>
        </Field>
        <Field Name="FK">
          <rd:TypeName>System.Int32</rd:TypeName>
          <DataField>FK</DataField>
        </Field>
        <Field Name="col2">
          <rd:TypeName>System.String</rd:TypeName>
          <DataField>col2</DataField>
        </Field>
        <Field Name="col1master">
          <rd:TypeName>System.String</rd:TypeName>
          <DataField>col1master</DataField>
        </Field>
      </Fields>
    </DataSet>
  </DataSets>
  <Width>16.08333cm</Width>
  <InteractiveHeight>29.7cm</InteractiveHeight>
  <Language>en-US</Language>
  <TopMargin>2.5cm</TopMargin>
  <PageHeight>29.7cm</PageHeight>
</Report>


Peter
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.