我正在尝试以编程方式更改TableLayoutPanel 中的行数(有时需要 4,有时需要 5,很少需要 6)。
不幸的是,更改行数不会使RowStyles集合保持同步,因此您无法设置新添加行的高度。以下测试代码演示了这一事实:
private void button1_Click(object sender, EventArgs e)
{
//TableLayoutPanels start with 2 rows by default.
Debug.Assert(tableLayoutPanel1.RowStyles.Count ==
tableLayoutPanel1.RowCount);
//Cannot remove rows
tableLayoutPanel1.RowCount = 1;
Debug.Assert(tableLayoutPanel1.RowStyles.Count ==
tableLayoutPanel1.RowCount);
}
Run Code Online (Sandbox Code Playgroud)
第二个断言失败。
private void button2_Click(object sender, EventArgs e)
{
//TableLayoutPanels start with 2 rows by default.
Debug.Assert(tableLayoutPanel1.RowStyles.Count ==
tableLayoutPanel1.RowCount);
//Cannot add rows
tableLayoutPanel1.RowCount = 6;
Debug.Assert(tableLayoutPanel1.RowStyles.Count ==
tableLayoutPanel1.RowCount);
}
Run Code Online (Sandbox Code Playgroud)
第二个断言失败。
那么设置RowCounta 属性的正确编程方式是TableLayoutPanel什么?
我正在尝试调试程序,我没有源代码:explorer.exe
它是Microsoft的原生Win32应用程序,符号可用.
我现在需要的是一个支持符号的(图形)调试器.
有没有新的图形调试器支持微软的符号服务器,是在过去的6个月里写的,我不知道?
图形调试器是您可以看到反汇编的一个,并且可以进入Step Into和Stop Over指令,例如:
德尔福
OllyDebug:
IDA Pro
alt text http://www.hex-rays.com/idapro/linux/remotedebugger2.gif
WinDbg没有向您显示一系列说明:
alt text http://windowsitpro.com/Files/11/21217/Figure_01.gif
在本机编程中,IXMLDOMDocument2对象有一个tranformNode()方法:
public BSTR transformNode(IXMLDOMNode stylesheet);
Run Code Online (Sandbox Code Playgroud)
所以最后我可以使用以下方法转换XML文档:
public string TransformDocument(IXMLDOMDocument2 doc, IXMLDOMDocument2 stylesheet)
{
return doc.TransformNode(stylesheet);
}
Run Code Online (Sandbox Code Playgroud)
我正试图找到管理的等价物.我已经发现了XmlDocument对象:
public string TransformDocument(XmlDocument doc, XmlDocument stylesheet)
{
//return doc.TransformNode(stylesheet); //TransformNode not supported
}
Run Code Online (Sandbox Code Playgroud)
那么转换xml的管理方式是什么?
我偶然发现了已弃用的 XslTransform对象,但18个重载中没有一个采用xml文档或xml样式表.
替换微软表示满口:System.Xml.Xsl.XslCompiledTransform.但就像它被弃用的表兄弟一样,XslCompiledTransform的14个重载都没有在输入参数中使用xml.
那么在C#.NET 2.0中转换xml的公认方法是什么?
换句话说:完成以下帮助方法:
public string TransformDocument(XmlDocument doc, XmlDocument stylesheet)
{
//todo: figure out how to transform xml in C#
}
Run Code Online (Sandbox Code Playgroud)
瓦卡斯得到了答案.这是另一个非常相似的解决方案:
/// <summary>
/// This method simulates the XMLDOMDocument.TransformNode method
/// </summary>
/// <param name="doc">XML document …Run Code Online (Sandbox Code Playgroud) 我想要一个处理程序重定向到Web表单页面,预先填写表单上的一些控件的值.
我尝试设置我当前的Request.Form数据:
if (theyWantToDoSomething)
{
//pre-fill form values
context.Request.Form["TextBox1"] = "test";
context.Request.Form["ComboBox1"] = "test 2";
context.Request.Form["TextBox2"] = GetTheTextForTheThing();
//tell the client to go there
context.Response.Redirect("~/SomeWebForm.aspx");
return;
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外,Form值是只读的.
将客户端发送到另一个页面的方法是什么,预先填写表单数据?
我使用Session状态来存储值.重要的是要注意,默认情况下,Handler无权访问Session(Session对象将为null).您必须通过将IRequiresSessionState标记接口添加到处理程序类来告诉IIS为您提供Session对象:
public class Handler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
...
if (theyWantToDoSomething)
{
//pre-fill form values
context.Session["thing1"] = "test";
context.Session["thing2"] = "test 2";
context.Session["thing3"] = GetTheTextForTheThing();
//tell the client to …Run Code Online (Sandbox Code Playgroud) 现在我有使用预期方法在SQL Server上启动事务的代码:
ExecuteNonQuery(connection, "BEGIN TRANSACTION");
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
ExecuteNonQuery(connection, "COMMIT TRANSACTION");
}
catch (Exception)
{
ExecuteNonQuery(connection, "ROLLBACK TRANSACTION");
throw;
}
Run Code Online (Sandbox Code Playgroud)
现在我正在考虑调查使用ADO.NET提供的事务抽象的想法的可能性:
DbTransaction trans = connection.BeginTransaction();
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
trans.Commit();
}
catch (Exception)
{
trans.Rollback();
throw;
}
Run Code Online (Sandbox Code Playgroud)
从基于SQL Server的事务到ADO.NET事务的这种简单转换的问题是错误:
当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery要求命令具有事务.该命令的Transaction属性尚未初始化.
我是否正确假设如果我想使用ADO.NET事务,我将不得不完全消除基础设施,将DbTransaction对象传递给在事务中执行或可能操作的每个方法?
VirtualMode = true
MultiSelect = false
Run Code Online (Sandbox Code Playgroud)
我可以获得选择的索引项,但是如何改变呢?
SelectedIndices 只读.
如何在XSD中进行/或验证?例如,在下面的xml片段中,如果action是A(add),则后续属性和元素是required:
<Post postID="22793" action="A" ...>
<Transaction ...>
<Disposition ...>
<AccountInformation ... />
<ThirdPartyInformation ... />
</Disposition>
<IndividualInformation ... />
</Transaction>
...
</Post>
Run Code Online (Sandbox Code Playgroud)
但是如果动作是D则禁止后续属性和属性::
<Post postID="22793" action="D" />
Run Code Online (Sandbox Code Playgroud)
即:如果操作是delete(D),则其余属性将从中更改
至
并且后续元素从中切换
minOccurences="1" maxOccurrences="unbounded"
Run Code Online (Sandbox Code Playgroud)
至
minOccurrences="0" maxOccurrences="0"
Run Code Online (Sandbox Code Playgroud)
是否可以使用XSD来定义xml结构?
我有包含数字的变量.虽然Lua允许将变量设置为nil,但变量随后变得有毒 - 破坏其路径中的所有代码.
如果变量包含a nil,我希望它转换为零.
local score;
score = gameResults.finalScore;
Run Code Online (Sandbox Code Playgroud)
我想确保score包含一个数字,所以我尝试:
local score;
score = tonumber(gameResults.finalScore);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.所以我尝试:
local function ToNumberEx(v)
if (v == nil) then
return 0
else
return tonumber(v)
end
local score;
score = ToNumberEx(gameResults.finalScore);
Run Code Online (Sandbox Code Playgroud)
但这不起作用.所以我尝试:
local function ToNumberEx(v)
if (v == nil) then
return 0
else
return tonumber(v)
end
local score;
score = ToNumberEx(gameResults.finalScore);
if (score == nil) then
score = 0
end
Run Code Online (Sandbox Code Playgroud)
这是有效的,但却失去了拥有一个功能的目的.
这个功能出了什么问题?我确信有一个完全合理和合理的解释 - 除了熟悉编程语言的人.
假设我有这个节点数据记录:
Type
PPerson = ^TPerson;
TPerson = record
Name: String;
Age: Integer;
SomeBool: Boolean;
end;
Run Code Online (Sandbox Code Playgroud)
要填充我的VirtualStringTree,我会这样做:
Procedure AddToTree(Person: TPerson);
Var
Node: PVirtualNode;
Data: PPerson;
Begin
Node := VT.AddChild(nil);
Data := VT.GetNodeData(Node);
Data.Name := Person.Name;
Data.Age := Person.Age;
Data.SomeBool := Person.SomeBool;
End;
Procedure TMyForm.MyButtonClick(Sender: TObject);
Var
Person: TPerson;
Begin
Person.Name := 'Jeff';
Person.Age := 16;
Person.SomeBool := False;
AddToTree(Person);
End:
Run Code Online (Sandbox Code Playgroud)
现在,虽然这很好用,但我想简化它,所以每当我向记录添加新字段时,我都不会修改AddToTree方法.
所以我尝试了这个:
Procedure AddToTree(Person: TPerson);
Begin
VT.AddChild(nil,@Person);
End;
Run Code Online (Sandbox Code Playgroud)
这个编译,但似乎PVirtualNode没有得到数据,因为我的VT没有显示任何东西,并且当打破OnGetText事件时,我看到变量是空的.
我究竟做错了什么?:)
如果用户将行插入表中,我希望SQL Server执行一些额外的处理 - 但不是在用户事务的上下文中.
例如,用户提供对文件夹的读访问权:
UPDATE Folders SET ReadAccess = 1
WHERE FolderID = 7
Run Code Online (Sandbox Code Playgroud)
就用户而言,我希望这是原子操作的结束.实际上我现在必须找到所有子文件和文件夹并给它们ReadAccess.
EXECUTE SynchronizePermissions
Run Code Online (Sandbox Code Playgroud)
这是一个可能很长的操作(超过2秒).我想这个冗长的操作发生" 后来 ".它可能在0秒后发生,并且在碳单元有机会考虑之前,异步更新已完成.
如何在需要(即触发)时异步运行此必需操作?
在理想的是:
CREATE TRIGGER dbo.Folders FOR INSERT, UPDATE, DELETE AS
EXECUTEASYNCHRONOUS SynchronizePermissions
Run Code Online (Sandbox Code Playgroud)
要么
CREATE TRIGGER dbo.Folders FOR INSERT, UPDATE, DELETE AS
EXECUTE SynchronizePermissions WITH(ASYNCHRONOUS)
Run Code Online (Sandbox Code Playgroud)
现在这发生在触发器上:
CREATE TRIGGER dbo.Folders FOR INSERT, UPDATE, DELETE AS
EXECUTE SynchronizePermissions
Run Code Online (Sandbox Code Playgroud)
并且用户每次对Folders表格进行更改时都被迫等待3秒钟.
我想过要在用户上创建一个每分钟运行一次的计划任务,并检查一个PermissionsNeedSynchronizing标志:
CREATE TRIGGER dbo.Folders FOR INSERT, UPDATE, DELETE AS …Run Code Online (Sandbox Code Playgroud)