Как построить выражения в таблице отчета так, чтобы в ячейках таблицы выводились значения из разных таблиц.
например:
есть таблица с полями
материал;код
и вторая таблица
код;описание
а в отчете надо вывести
материал описание
причем описание чтоб соответствовало материалу по связующему полю "код"
в первой ячейке будет
Fields!Code.Value
а вот как следует написать выражение во второй ячейке?
Зарание спасибо!
Здравствуйте, 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