简体   繁体   中英

How to create a link/button that will allow me to open another window in a DataGrid in WPF?

Is it possible to create a DataGrid in WPF and have one of the columns in the DataGrid be a link/button so that when the link/button is click, this will open another window which will have information based in the ID passed by the link/button click?

I've been searching the internet for two days now but now luck.

Here is my DataGrid.

    <DataGrid Name="tasksgrid" Margin="10,70,0,59"  AutoGenerateColumns="False">
        <DataGrid.Columns>                
            <DataGridTextColumn Header="TASK ID" Binding="{Binding ID}"/>
            <DataGridTextColumn Header="Title" Binding="{Binding TITLE}" Width="250"/>
            <DataGridTextColumn Header="Resource" Binding="{Binding RESOURCE}"/>
            <DataGridTextColumn Header="customer" Binding="{Binding CUSTOMER}"/>
            <DataGridTextColumn Header="REQUESTED DATE" Binding="{Binding DATE_REQUESTED}"/>
            <DataGridTextColumn Header="DUE DATE" Binding="{Binding DUE_DATE}"/>
            <DataGridTextColumn Header="STATUS" Binding="{Binding STATUS}"/>
            <DataGridTextColumn Header="application" Binding="{Binding APPLICATION}"/>
            <DataGridTextColumn Header="REQUESTOR" Binding="{Binding REQUESTOR}"/>
            <DataGridTextColumn Header="Customer ticket" Binding="{Binding CUSTOMER_TICKET_NUM}"/>
            <DataGridTextColumn Header="PT Helpdesk #" Binding="{Binding PT_TICKET_NUM}"/>
            <DataGridTextColumn Header="Vendor Ticket Number" Binding="{Binding EXTERNAL_TICKET_NUM}"/>
            <DataGridTextColumn Header="DESCRIPTION" Binding="{Binding DESCRIPTION}" Width="400"/>               
        </DataGrid.Columns>
    </DataGrid>

Here is how the DataGrid is populated.

WMSTasksDataContext objtaskDataContext = new WMSTasksDataContext();

        tasksgrid.ItemsSource = (from objTasks in objtaskDataContext.WMS_TASKs
                                 select objTasks);

So I did more digging and I found the answer.

XAML Code:

        <DataGrid Name="tasksgrid" Margin="10,70,0,59"  AutoGenerateColumns="False">
        <DataGrid.Columns>               
            <DataGridTemplateColumn Header="Task ID">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate >
                        <TextBlock>
                            <Hyperlink Click="Hyperlink_Click_1" Tag="{Binding Path=ID}">
                                <TextBlock Text="{Binding ID}"></TextBlock>
                            </Hyperlink>
                        </TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTextColumn Header="TASK ID" Binding="{Binding ID}"/>
            <DataGridTextColumn Header="Title" Binding="{Binding TITLE}" Width="250"/>
            <DataGridTextColumn Header="Resource" Binding="{Binding RESOURCE}"/>
            <DataGridTextColumn Header="customer" Binding="{Binding CUSTOMER}"/>
            <DataGridTextColumn Header="REQUESTED DATE" Binding="{Binding DATE_REQUESTED}"/>
            <DataGridTextColumn Header="DUE DATE" Binding="{Binding DUE_DATE}"/>
            <DataGridTextColumn Header="STATUS" Binding="{Binding STATUS}"/>
            <DataGridTextColumn Header="application" Binding="{Binding APPLICATION}"/>
            <DataGridTextColumn Header="REQUESTOR" Binding="{Binding REQUESTOR}"/>
            <DataGridTextColumn Header="Customer ticket" Binding="{Binding CUSTOMER_TICKET_NUM}"/>
            <DataGridTextColumn Header="PT Helpdesk #" Binding="{Binding PT_TICKET_NUM}"/>
            <DataGridTextColumn Header="Vendor Ticket Number" Binding="{Binding EXTERNAL_TICKET_NUM}"/>
            <DataGridTextColumn Header="DESCRIPTION" Binding="{Binding DESCRIPTION}" Width="400"/>               
        </DataGrid.Columns>
    </DataGrid>

Code behind:

private void Hyperlink_Click_1(object sender, RoutedEventArgs e)
{          
     string taskId = ((Hyperlink)sender).Tag.ToString();

     ViewTask viewTask = new ViewTask();
     viewTask.TaskID.Text = taskId;
     viewTask.Show();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM