2011-01-14 33 views
9

यदि कोई रिकॉर्ड उपलब्ध नहीं है, तो मैं शीर्षलेख के नीचे, डेटा ग्रिड पर TextBlock जोड़ना चाहता हूं, "कोई रिकॉर्ड नहीं मिला" संदेश दिखा रहा है।एक WPF DataGrid पर "कोई रिकॉर्ड नहीं मिला" संदेश दिखाएं जब यह खाली है

संदर्भ के लिए संलग्न छवि पर विचार करें। alt text

उत्तर

4

अंत में मैं रास्ता खोजने में सक्षम हूं।

  1. जब खाली में ग्रिड, ग्रिड
  2. पर एक डिफ़ॉल्ट पंक्ति जोड़ने के एक RowDetailTemplate जो संदेश के साथ एक पाठ खंड हो बनाएं "कोई रिकार्ड नहीं मिला"

    <DataGrid.RowDetailsTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="No Record Found" Width="400"></TextBlock> 
         </StackPanel> 
        </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
    
  3. पर शैली सेट करें datagrid

    <DataGrid.Style> 
        <Style TargetType="DataGrid"> 
         <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding DataContext.IsRecordExists, 
                RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType={x:Type local:MainWindow}}}" Value="false"> 
           <Setter Property="RowHeight" Value="0"></Setter> 
           <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
    </DataGrid.Style> 
    

तक डिफ़ॉल्ट (डेटाग्रिड पर उपलब्ध रिकॉर्ड) पंक्ति विवरण टेम्पलेट ध्वस्त हो जाएगा।

डेटा ट्रिगर जो सीएलआर पॉपर्टी की जांच करता है, यदि यह गलत है तो पंक्ति विवरण टेम्पलेट दिखाएं।

पंक्ति पंक्ति को 0 के रूप में सेट करने का कारण डिफ़ॉल्ट पंक्ति को छिपाने के लिए जिसे हमने पहले चरण में जोड़ा था।

+0

मैं वही चाहता हूं लेकिन चांदी की रोशनी पर। लेकिन चांदी की रोशनी में समर्थित नहीं है :(... कोई विकल्प? –

+0

मैं भी इसी कार्यक्षमता की तलाश में हूं लेकिन उपरोक्त कोड में पूर्वज Type = {x: स्थानीय टाइप करें : मेनविंडो}}}, मुझे त्रुटि मिल रही है "स्थानीय टाइप करें: मेनविंडो नहीं मिला", मुझे किस पूर्वजों को – Surya

5

मुझे लगता है कि ग्रिड पर एक टेक्स्ट ब्लॉक को केन्द्रित करना आसान है और पंक्तियों की संख्या के आधार पर इसकी दृश्यता सेट करना आसान है। मैं आमतौर पर MVVM का उपयोग कर रहा है और एक दृश्य मॉडल संपत्ति के लिए दृश्यता बाध्य होगा:

<Grid> 
    <toolkit:DataGrid> 
     <toolkit:DataGrid.Columns> 
      . 
      . 
      . 
     </toolkit:DataGrid.Columns> 
    </toolkit:DataGrid> 
    <TextBlock Text="No Records Found" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding EmptyMessageVisibility, Mode=OneWay, FallbackValue=Visible}" /> 
</Grid> 
+0

रखने की आवश्यकता है, यह उद्देश्य हल कर सकता है लेकिन मेरी आवश्यकता ग्रिड पर संदेश दिखाया गया था (ग्रिड पाद लेख से पहले) का अर्थ संदेश है ग्रिड पर एक पंक्ति के रूप में प्रदर्शित किया जाएगा। – pchajer

11

इसकी दिया सवाल के बाद से एक लंबे समय दिया गया है। लेकिन मैंने सोचा कि यह किसी और के लिए उपयोगी हो सकता है।

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
</Window.Resources> 

<DataGrid Name="dgProjects" ItemsSource="{Binding Projects}" AutoGenerateColumns="True" /> 

<TextBlock Text="Employee has no projects" Visibility="{Binding Items.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=dgProjects}" /> 

सादगी उद्देश्य के लिए मैंने ऑटोजनेर कॉलम = "ट्रू" सेट किया है। कृपया कॉलम को परिभाषित करें। इस तरह जब एक खाली डेटासोर्स बाध्य होता है, कॉलम नाम 'खाली पंक्ति' संदेश के साथ दिखाए जाएंगे।

+1

यदि आप हेडर रखना नहीं चाहते हैं, तो मुझे लगता है कि यह सबसे अच्छा समाधान है। –

+0

यह सबसे व्यावहारिक और सरल समाधान है। धन्यवाद! – gbdavid

संबंधित मुद्दे