Вот самый простой способ сделать это: добавить пользовательскую команду в панель команд строки сетки данных для своей таблицы данных.В этом примере я вызываю команду «Открыть файл PDF».Затем добавьте этот код в код Выполнить для команды:
partial void OpenPDFFile_Execute()
{
const string LOCAL_SERVER_PDF_DIR = @"\\MyServer\PDFs\";
const string WEB_SERVER_PDF_DIR = "http://myweb.server/PDFs/";
const string PDF_SUFFIX = ".pdf"; //assumes you do not include the extension in the db field value
if (AutomationFactory.IsAvailable)
{
//if the AutomationFactory is available, this is a desktop deployment
//use the shell to open a PDF file from the local network
dynamic shell = AutomationFactory.CreateObject("Shell.Application");
string filePath = LOCAL_SERVER_PDF_DIR + this.PDFFiles.SelectedItem.FileName + PDF_SUFFIX;
shell.ShellExecute(filePath);
}
else
{
//otherwise this must be a web deployment
//in order to make this work you must add a reference to System.Windows.Browser
//to the Client project of your LS solution
var uri = new Uri(WEB_SERVER_PDF_DIR + this.PDFFiles.SelectedItem.FileName + PDF_SUFFIX);
HtmlPage.Window.Navigate(uri, "_blank");
}
}
Вам потребуется добавить следующий импорт в начало файла кода пользователя, чтобы этот код компилировался:
using System.Runtime.InteropServices.Automation;
using System.Windows.Browser;
Я должен отметить, что вам нужен каталог для сервера PDF-файлов.Этот пример является гибким в отношении развертывания, поскольку он обрабатывает как настольные, так и веб-конфигурации.Поскольку вам необходимо настроить директорию PDF, вам может потребоваться просто обработать один параметр конфигурации простым способом (или вы можете открыть один и тот же каталог PDF через http и как локальную сетевую папку).
Выможет также хотеть представить это как истинную ссылку вместо кнопки.Для этого вам понадобится пользовательский элемент управления SilverLight.В любом случае, я бы порекомендовал сначала реализовать ссылку PDF с помощью кнопки.Затем вы можете переместить этот же код в обработчик событий ссылки как отдельный проект, если на это стоит потратить время.